LeetCode 1011. 在 D 天内送达包裹的能力
原题链接
中等
作者:
Acvv_scl
,
2021-04-26 23:27:00
,
所有人可见
,
阅读 283
class Solution {
boolean check(int[]w,int D,int x){
int cnt=1;
int s=0;
for(int num:w){
//因为x可能小于数组中的数;所以是不合法的直接返回;如果不写这个判断,l就要取数组中的最大值;
if(num>x)return false;
//每次叠加
s+=num;
//如果叠加之后大于x了,说明今天只能运输这么多,要新增一天来运输;
if(s>x){
cnt++;
s=num;
}
}
return cnt<=D;
}
public int shipWithinDays(int[] weights, int D) {
int l=0;
int r=500*50000;
while(l<r){
int mid=l+r>>1;
//如果可以mid满足运输的话;就继续左移看看是否还有和的最小的值;
if(check(weights,D,mid))r=mid;
//不满足的话 那就扩展和的值了;
else l=mid+1;
}
return l;
}
}