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: 9
Example 3:
Input: nums = [1,4,4], m = 3 Output: 4
Constraints:
1 <= nums.length <= 1000
0 <= nums[i] <= 106
1 <= m <= min(50, nums.length)
Solution(javascript)
/*
* @lc app=leetcode id=410 lang=javascript
*
* [410] Split Array Largest Sum
*/
// @lc code=start
/**
* @param {number[]} nums
* @param {number} m
* @return {number}
*/
const splitArray = function (nums, m) {
let left = 0
let right = 0
for (const num of nums) {
left = Math.max(left, num)
right += num
}
while (left <= right) {
const middle = Math.floor(left + (right - left) / 2)
let currentSum = 0
let count = 1
for (const num of nums) {
currentSum += num
if (currentSum > middle) {
currentSum = num
count += 1
}
}
// console.log(count)
if (count < m) {
right = middle - 1
} else if (count > m) {
left = middle + 1
} else {
right = middle - 1
}
}
return left
}
// @lc code=end