410. Split Array Largest Sum
LeetCode 410. Split Array Largest Sum
Description
Given an array nums which consists of non-negative integers and an integer m, you can split the array into m non-empty continuous subarrays.
Write an algorithm to minimize the largest sum among these m subarrays.
Example 1:
Input: nums = [7,2,5,10,8], m = 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], m = 2
Output: 9Example 3:
Input: nums = [1,4,4], m = 3
Output: 4Constraints:
1 <= nums.length <= 10000 <= nums[i] <= 10^61 <= m <= min(50, nums.length)
Tags
Binary Search, Dynamic Programming
Solution
Totally same as LeetCode 1011. See Reference.
Complexity
Time complexity:
Space complexity:
Code
func splitArray(nums []int, m int) int {
var l, r int
for _, num := range nums {
if num > l {
l = num
}
r += num
}
for l < r {
mid := l + (r-l)/2
if subsRequired(nums, mid) > m {
l = mid + 1
} else {
r = mid
}
}
return l
}
func subsRequired(nums []int, cap int) int {
subs, C := 1, cap // 1 for the last subarray
for _, num := range nums {
if num > cap {
subs++
cap = C - num
} else {
cap -= num
}
}
return subs
}Reference
Last updated
Was this helpful?