https://leetcode-cn.com/problems/capacity-to-ship-packages-within-d-days/
思路:经典二分求符合题意的最小值问题。显然船的最大运载重量
w
e
i
g
h
t
weight
weight越大,把传送带上所有包裹送达所需要的天数
d
a
y
day
day越小。那么我们可以二分船的最大运载重量,然后
O
(
n
)
O(n)
O(n)判断它是否可以在
D
D
D天内运输完所有的货物。时间复杂度
O
(
n
l
o
g
(
∑
i
=
0
n
w
e
i
g
h
t
s
i
)
)
O(nlog(\sum_{i=0}^nweights_i))
O(nlog(∑i=0nweightsi))。
class Solution {
public:
int shipWithinDays(vector<int>& weights, int D) {
int l=0,r=0,mid;
for(int ele:weights)
r+=ele;
while(l<=r)
{
mid=(l+r)>>1;
bool flag=1;
int cnt=1,sum=0;
for(int ele:weights)
{
sum+=ele;
if(sum>mid)
{
++cnt;
sum=ele;
}
if(cnt>D||ele>mid)
{
flag=0;
break;
}
}
if(flag)
r=mid-1;
else
l=mid+1;
}
return l;
}
};