Split Array Largest Sum — Binary Search on Answer

Sanjeev SharmaSanjeev Sharma
1 min read

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

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro