1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| public int splitArray(int[] nums, int k) { int minMax = 0; int sum = 0; for (int num : nums) { minMax = Math.max(minMax, num); sum += num; }
int left = minMax, right = sum; while (left < right) { int mid = (left + right) >>> 1;
int count = splitBySum(nums, mid); if (count > k) { left = mid + 1; } else { right = mid; } }
return left; }
private int splitBySum(int[] nums, int sum) { int count = 1; int subSum = 0;
for (int num : nums) { if (subSum + num > sum) { subSum = 0; count++; } subSum += num; }
return count; }
|
References
410. Split Array Largest Sum