Skip to content
thesarfo

Reference

Split Array Largest Sum

Binary searching to minimize the largest subarray sum when splitting an array into k contiguous parts.

views 0

Split an array into exactly k contiguous subarrays, minimizing the largest subarray sum. [7,2,5,10,8], k=2 → best split is [7,2,5]/[10,8], largest sum 18. (LeetCode problem) — identical shape to Allocate Books.

public class Solution {
public int splitArray(int[] nums, int k) {
int max = 0, sum = 0;
for (int num : nums) {
max = Math.max(max, num);
sum += num;
}
int low = max, high = sum;
int result = 0;
while (low <= high) {
int mid = low + (high - low) / 2;
if (isFeasible(nums, k, mid)) {
result = mid;
high = mid - 1; // try a smaller maximum
} else {
low = mid + 1; // need a larger maximum
}
}
return result;
}
private boolean isFeasible(int[] nums, int k, int maxSum) {
int subarrays = 1;
int currentSum = 0;
for (int num : nums) {
if (currentSum + num > maxSum) {
subarrays++;
currentSum = num;
if (subarrays > k) {
return false;
}
} else {
currentSum += num;
}
}
return true;
}
}

Time: O(n × log(sum - max)).