力扣1011.在D天内送达包裹的能力
力扣1011.在D天内送达包裹的能力
题目解析及思路
题目要求按照给定顺序传递包裹,要求返回能在day天传递完所有包裹的最小承载能力
-
二分答案
- 下界为最大包裹的重量 , 上界为所有重量之和
代码
class Solution {
public:
int shipWithinDays(vector<int>& weights, int days) {
auto check = [&](int x) -> bool
{
int res=1;
int t=x;
for(auto w:weights)
{
if(t < w)
{
t = x;
res++;
}
t -= w;
if(res > days) return false;
}
return true;
};
int l = ranges::max(weights),r = accumulate(weights.begin(),weights.end(),0);
while(l<r)
{
int mid = l + r >> 1;
if(check(mid)) r = mid;
else l = mid + 1;
}
return l;
}
};