Skip to content

Commit 078d021

Browse files
committed
Improved tasks
1 parent 71069c7 commit 078d021

File tree

2 files changed

+22
-19
lines changed
  • src/main/kotlin/g3401_3500
    • s3413_maximum_coins_from_k_consecutive_bags
    • s3414_maximum_score_of_non_overlapping_intervals

2 files changed

+22
-19
lines changed

src/main/kotlin/g3401_3500/s3413_maximum_coins_from_k_consecutive_bags/Solution.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package g3401_3500.s3413_maximum_coins_from_k_consecutive_bags
22

33
// #Medium #Array #Sorting #Greedy #Binary_Search #Prefix_Sum #Sliding_Window
4-
// #2025_01_07_Time_312_(60.00%)_Space_125.55_(80.00%)
4+
// #2025_01_08_Time_275_(86.67%)_Space_125.92_(80.00%)
55

66
import kotlin.math.max
77

88
class Solution {
99
fun maximumCoins(coins: Array<IntArray>, k: Int): Long {
10-
coins.sortWith { a: IntArray, b: IntArray -> a[0] - b[0] }
10+
coins.sortWith { a: IntArray?, b: IntArray? -> a!![0] - b!![0] }
1111
val n = coins.size
1212
var res: Long = 0
1313
var cur: Long = 0
@@ -32,7 +32,7 @@ class Solution {
3232
j++
3333
}
3434
val part = max(0.0, (coin[1] - k - coins[j][0] + 1).toDouble()).toLong() * coins[j][2]
35-
res = max(res.toDouble(), (cur - part).toDouble()).toLong()
35+
res = max(res, (cur - part))
3636
}
3737
return res
3838
}

src/main/kotlin/g3401_3500/s3414_maximum_score_of_non_overlapping_intervals/Solution.kt

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,60 @@
11
package g3401_3500.s3414_maximum_score_of_non_overlapping_intervals
22

3+
// #Hard #Array #Dynamic_Programming #Sorting #Binary_Search
4+
// #2025_01_08_Time_920_(100.00%)_Space_112.32_(93.33%)
5+
36
class Solution {
47
fun maximumWeight(intervals: List<List<Int>>): IntArray {
58
val n = intervals.size
6-
val ns = arrayOfNulls<IntArray>(n)
9+
val ns = Array<IntArray>(n) { IntArray(0) }
710
var p = 0
811
for (li in intervals) {
912
ns[p] = intArrayOf(li[0], li[1], li[2], p)
1013
p++
1114
}
12-
var dp1 = Array<IntArray?>(n) { IntArray(0) }
15+
var dp1 = Array<IntArray>(n) { IntArray(0) }
1316
var dp = LongArray(n)
1417
ns.sortWith { a: IntArray?, b: IntArray? -> a!![0] - b!![0] }
15-
for (k in 0..3) {
16-
val dp3 = arrayOfNulls<IntArray>(n)
18+
(0..3).forEach { k ->
19+
val dp3 = Array<IntArray>(n) { IntArray(0) }
1720
val dp2 = LongArray(n)
18-
dp3[n - 1] = intArrayOf(ns[n - 1]!![3])
19-
dp2[n - 1] = ns[n - 1]!![2].toLong()
21+
dp3[n - 1] = intArrayOf(ns[n - 1][3])
22+
dp2[n - 1] = ns[n - 1][2].toLong()
2023
for (i in n - 2 downTo 0) {
2124
var l = i + 1
2225
var r = n - 1
2326
while (l <= r) {
2427
val mid = (l + r) shr 1
25-
if (ns[mid]!![0] > ns[i]!![1]) {
28+
if (ns[mid][0] > ns[i][1]) {
2629
r = mid - 1
2730
} else {
2831
l = mid + 1
2932
}
3033
}
31-
dp2[i] = ns[i]!![2] + (if (l < n) dp[l] else 0)
34+
dp2[i] = ns[i][2] + (if (l < n) dp[l] else 0)
3235
if (i + 1 < n && dp2[i + 1] > dp2[i]) {
3336
dp2[i] = dp2[i + 1]
3437
dp3[i] = dp3[i + 1]
3538
} else {
3639
if (l < n) {
37-
dp3[i] = IntArray(dp1[l]!!.size + 1)
38-
dp3[i]!![0] = ns[i]!![3]
39-
for (j in dp1[l]!!.indices) {
40-
dp3[i]!![j + 1] = dp1[l]!![j]
40+
dp3[i] = IntArray(dp1[l].size + 1)
41+
dp3[i][0] = ns[i][3]
42+
for (j in dp1[l].indices) {
43+
dp3[i][j + 1] = dp1[l][j]
4144
}
42-
dp3[i]?.sort()
45+
dp3[i].sort()
4346
} else {
44-
dp3[i] = intArrayOf(ns[i]!![3])
47+
dp3[i] = intArrayOf(ns[i][3])
4548
}
46-
if (i + 1 < n && dp2[i + 1] == dp2[i] && check(dp3[i]!!, dp3[i + 1]!!) > 0) {
49+
if (i + 1 < n && dp2[i + 1] == dp2[i] && check(dp3[i], dp3[i + 1]) > 0) {
4750
dp3[i] = dp3[i + 1]
4851
}
4952
}
5053
}
5154
dp = dp2
5255
dp1 = dp3
5356
}
54-
return dp1[0]!!
57+
return dp1[0]
5558
}
5659

5760
private fun check(ns1: IntArray, ns2: IntArray): Int {

0 commit comments

Comments
 (0)