Split Array Largest Sum — Binary Search on Answer
Advertisement
Problem 318 · Split Array Largest Sum
Difficulty: Medium · Pattern: BS on Answer
Split nums into k non-empty subarrays to minimize the maximum subarray sum.
Solutions
# Python
def splitArray(nums, k):
def feasible(limit):
parts = 1; cur = 0
for x in nums:
if cur + x > limit: parts += 1; cur = 0
cur += x
return parts <= k
lo, hi = max(nums), sum(nums)
while lo < hi:
mid = (lo+hi)//2
if feasible(mid): hi = mid
else: lo = mid+1
return lo
// Java
public int splitArray(int[] nums, int k) {
int lo=0, hi=0;
for (int x:nums) { lo=Math.max(lo,x); hi+=x; }
while (lo<hi) {
int mid=lo+(hi-lo)/2, parts=1, cur=0;
for (int x:nums) { if(cur+x>mid){parts++;cur=0;} cur+=x; }
if (parts<=k) hi=mid; else lo=mid+1;
}
return lo;
}
Complexity
- Time: O(n log(sum-max))
- Space: O(1)
Advertisement