|
4 | 4 | * @return {number}
|
5 | 5 | */
|
6 | 6 | const minSpaceWastedKResizing = function(nums, k) {
|
7 |
| - const n = nums.length, INF = 200 * 1e6; |
8 |
| - const memo = Array.from({ length: 200 }, () => Array(200)); |
9 |
| - return dp(nums, 0, k); |
10 |
| - function dp(nums, i, k) { |
11 |
| - if (i === n) return 0; |
12 |
| - if (k === -1) return INF; |
13 |
| - if (memo[i][k] != null) return memo[i][k]; |
14 |
| - let ans = INF, maxNum = nums[i], totalSum = 0; |
15 |
| - for (let j = i; j < n; j++) { |
16 |
| - maxNum = Math.max(maxNum, nums[j]); |
17 |
| - totalSum += nums[j]; |
18 |
| - const wasted = maxNum * (j - i + 1) - totalSum; |
19 |
| - ans = Math.min(ans, dp(nums, j + 1, k - 1) + wasted); |
| 7 | + const n = nums.length, INF = 200 * 1e6 |
| 8 | + const memo = Array.from({length: n}, () => Array(k)) |
| 9 | + return dp(0, k) |
| 10 | + |
| 11 | + function dp(i, k) { |
| 12 | + if(i === n) return 0 |
| 13 | + if(k < 0) return INF |
| 14 | + if(memo[i][k] != null) return memo[i][k] |
| 15 | + let res = INF, max = nums[i], sum = 0 |
| 16 | + for(let j = i; j < n; j++) { |
| 17 | + max = Math.max(max, nums[j]) |
| 18 | + sum += nums[j] |
| 19 | + const waste = max * (j - i + 1) - sum |
| 20 | + res = Math.min(res, dp(j + 1, k - 1) + waste) |
20 | 21 | }
|
21 |
| - return memo[i][k] = ans; |
| 22 | + return memo[i][k] = res |
22 | 23 | }
|
23 | 24 | };
|
24 |
| - |
0 commit comments