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 39
| class Solution { public int minTime(int[] time, int m) { int sum = 0; for (int t : time) { sum += t; }
int left = 0, right = sum; while (left < right) { int mid = (left + right) >>> 1; if (canFinish(time, mid, m)) { right = mid; } else { left = mid + 1; } }
return left; }
private boolean canFinish(int[] time, int t, int maxDays) { int subMax = 0, subSum = 0, subDays = 1;
for (int num : time) { int secondMax = Math.min(subMax, num); if (subSum + secondMax <= t) { subSum += secondMax; subMax = Math.max(subMax, num); } else { subSum = 0; subDays++; subMax = num; } }
return subDays <= maxDays; } }
|