Skip to content

410. Split Array Largest Sum

Difficulty: Hard

LeetCode Problem View on GitHub


410. Split Array Largest Sum

Hard


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

class Solution {
    public int splitArray(int[] nums, int k) {
        int n = nums.length;
        int low = 0, high = (int)(1e9), ans = -1;
        while (low <= high) {
            int mid = low + (high - low) / 2;
            if (ok(mid, nums, k)) {
                ans = mid;
                high = mid - 1;
            }
            else low = mid + 1;
        } 
        return ans;
    }
    private boolean ok(int mid, int arr[], int k) {
        int n = arr.length;
        long currSum = 0, count = 0;
        for (int i = 0; i < n; i++) {
            if (arr[i] > mid) {
                return false;
            }
            if (currSum + arr[i] > mid) {
                currSum = arr[i];
                count++;
            }
            else {
                currSum += arr[i];
            }
        }

        return count + 1 <= k;
    }
}

Complexity Analysis

  • Time Complexity: O(?)
  • Space Complexity: O(?)

Approach

Detailed explanation of the approach will be added here