Skip to content

410. Split Array Largest Sum

Difficulty Topics

Description

Given an integer array nums and an integer k, split nums into k non-empty subarrays such that the largest sum of any subarray is minimized.

Return the minimized largest sum of the split.

A subarray is a contiguous part of the array.

 

Example 1:

Input: nums = [7,2,5,10,8], k = 2
Output: 18
Explanation: There are four ways to split nums into two subarrays.
The best way is to split it into [7,2,5] and [10,8], where the largest sum among the two subarrays is only 18.

Example 2:

Input: nums = [1,2,3,4,5], k = 2
Output: 9
Explanation: There are four ways to split nums into two subarrays.
The best way is to split it into [1,2,3] and [4,5], where the largest sum among the two subarrays is only 9.

 

Constraints:

  • 1 <= nums.length <= 1000
  • 0 <= nums[i] <= 106
  • 1 <= k <= min(50, nums.length)

Solution

split-array-largest-sum.py
class Solution:
    def splitArray(self, nums: List[int], m: int) -> int:

        def good(x):
            s = 0
            curr = 1

            for num in nums:
                s += num

                if s > x:
                    s = num
                    curr += 1

                if curr > m: return False

            return True

        left, right = max(nums), (10 ** 6) * 50

        while left < right:
            mid = left + (right - left) // 2

            if good(mid):
                right = mid
            else:
                left = mid + 1

        return left