LeetCode:1011. 在 D 天内送达包裹的能力
二分查找, 主要找出运载能力的下限和上限
当包裹一天送完,则是上限, 上限为所有物品的和
当包裹一天只运载一个,则是下限,为所有包裹中的最大值。
之后二分查找,枚举当前为最低的运载能力。
AC Code
class Solution {
public int shipWithinDays(int[] we, int d) {
int len = we.length;
int left = 0, right = 0;
for(int i = 0; i < len; i++) {
if(left < we[i]) left = we[i];
right += we[i];
}
// 枚举最低运载能力
while(left <= right) {
int mid = left + (right - left) / 2;
int sum = 0, day = 0;
for(int i = 0; i < len; i++) {
sum += we[i];
if(sum > mid) {
// 结算
day++;
sum = we[i];
}
if(i == len - 1) day++;
}
if(day <= d) right = mid - 1;
else left = mid + 1;
}
return left;
}
}