public int shipWithinDays(int[] weights, int D) {
//我是废了,参考答案
//二分查找加滑窗
//首先记录一下sum和max
int sum=0;int max=0;
for(int num:weights){
sum+=num;
if(num>max){
max=num;
}
}
if(D==1) return sum;
//最后的结果一定在[min,sum]
//二分查找答案
while(max<=sum){
int mid=(sum+max)/2;
//然后判断,如果可以向左走,如果不可以向右走
if(can(weights,mid,D)){
//向左走
sum=mid-1;
}else{
//向右走
max=mid+1;
}
}
return max;
}
public boolean can(int[] weights,int load,int D){
int curSum=0;
int start=0;
for(int num:weights){
curSum+=num;
if(curSum>load){
curSum=num;
start++;
}
}
start++;
return start<=D;
}
leetcode1011二分查找+滑窗
最新推荐文章于 2024-11-03 20:43:31 发布
这篇博客介绍了如何使用二分查找和滑动窗口算法来解决在给定天数内能否将货物装船的问题。通过记录货物总重量和最大重量,确定可行的装货范围,并进行二分查找优化。文章详细阐述了can函数的实现,该函数判断在当前载重下是否能在限定天数内完成装货。
摘要由CSDN通过智能技术生成