Skip to content

Commit e6de3e3

Browse files
authored
Create 1043-partition-array-for-maximum-sum.kt
1 parent 755a89a commit e6de3e3

File tree

1 file changed

+57
-0
lines changed

1 file changed

+57
-0
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Dp solution
2+
class Solution {
3+
fun maxSumAfterPartitioning(arr: IntArray, k: Int): Int {
4+
val n = arr.size
5+
val dp = IntArray (k)
6+
dp[0] = arr[0]
7+
8+
for (i in 1 until n) {
9+
var curMax = 0
10+
var maxAtI = 0
11+
for (j in i downTo (i - k + 1)) {
12+
if (j < 0) break
13+
14+
curMax = maxOf(curMax, arr[j])
15+
16+
val winLen = i - j + 1
17+
val curSum = curMax * winLen
18+
val subArrSum = if (j > 0) dp[(j - 1) % k] else dp[k - 1]
19+
20+
maxAtI = maxOf(maxAtI, curSum + subArrSum)
21+
}
22+
23+
dp[i % k] = maxAtI
24+
}
25+
26+
return dp[(n - 1) % k]
27+
}
28+
}
29+
30+
// recursion + memoization
31+
class Solution {
32+
fun maxSumAfterPartitioning(arr: IntArray, k: Int): Int {
33+
val n = arr.size
34+
val dp = IntArray (n) { -1 }
35+
36+
fun dfs(i: Int): Int {
37+
if (i == n) return 0
38+
if (dp[i] != -1) return dp[i]
39+
40+
var curMax = 0
41+
var res = 0
42+
for (j in i until minOf(n, i + k)) {
43+
curMax = maxOf(curMax, arr[j])
44+
val winLen = j - i + 1
45+
res = maxOf(
46+
res,
47+
dfs(j + 1) + curMax * winLen
48+
)
49+
}
50+
51+
dp[i] = res
52+
return res
53+
}
54+
55+
return dfs(0)
56+
}
57+
}

0 commit comments

Comments
 (0)