Skip to content

Commit 11c2980

Browse files
committed
update
1 parent cc30195 commit 11c2980

File tree

1 file changed

+14
-17
lines changed

1 file changed

+14
-17
lines changed

[M]dynamic-programming/[M]dynamic-programming/410-split-array-largest-sum.py

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,42 +6,39 @@ def splitArray(self, nums: List[int], k: int) -> int:
66
for i, num in enumerate(nums):
77
total += num
88
prefix[i + 1] = total
9-
dp = [[float('inf')] * (k + 1) for _ in range(n)]
10-
for i in range(n):
11-
dp[i][1] = prefix[i + 1] - prefix[0]
129

10+
dp = [[float('inf') for _ in range(k + 1)] for _ in range(n)]
11+
for end in range(n):
12+
dp[end][1] = prefix[end + 1] - prefix[0]
13+
1314
for end in range(n):
1415
for interval in range(2, k + 1):
1516
for cut in range(end, interval - 2, - 1):
16-
cur_res = max(dp[cut - 1][interval - 1], prefix[end + 1] - prefix[cut])
17-
dp[end][interval] = min(dp[end][interval], cur_res)
18-
17+
largest_sum = max(dp[cut - 1][interval - 1], prefix[end + 1] - prefix[cut])
18+
dp[end][interval] = min(dp[end][interval], largest_sum)
1919
return dp[n - 1][k]
2020

21-
# time O(n** 2 * k)
21+
# time O(n**2 * k)
2222
# space O(nk)
2323
# using dynamic programming and interval (start from one interval)
2424

2525
class Solution:
2626
def splitArray(self, nums: List[int], k: int) -> int:
2727

28-
def valid(limit):
28+
def valid(bound):
29+
group = 1
2930
total = 0
30-
group = 0
3131
for num in nums:
32-
if num > limit:
32+
if num > bound:
3333
return False
34-
if total + num <= limit:
35-
total += num
36-
else:
34+
if total + num > bound:
3735
group += 1
3836
total = num
39-
if total:
40-
group += 1
37+
else:
38+
total += num
4139
return group <= k
4240

43-
total = sum(nums)
44-
left, right, boundary = 0, total, - 1
41+
left, right, boundary = 0, sum(nums), - 1
4542
while left <= right:
4643
m = (left + right) // 2
4744
if valid(m):

0 commit comments

Comments
 (0)