题目概述:
传送带上的包裹必须在 D 天内从一个港口运送到另一个港口。
传送带上的第 i 个包裹的重量为 weights[i]。每一天,我们都会按给出重量的顺序往传送带上装载包裹。我们装载的重量不会超过船的最大运载重量。
返回能在 D 天内将传送带上的所有包裹送达的船的最低运载能力。
题目分析:
将题目简化分析以后的大致意思为:给出一个数组,对数组里的元素分类,要求不改变数组里的顺序且组数不得超过给与的天数。每一种分类方法都会有一个每组求和的最大值,返回所有分类方法中和最大值的最小值。
代码如下:
class Solution {
public:
int shipWithinDays(vector<int>& weights, int D) {
int left=*max_element(weights.begin(),weights.end());
int right=accumulate(weights.begin(),weights.end(),0);
while(left<right){
int mid=(left+right)/2;
int need=1,cur=0;
for(int weight:weights){
if(cur+weight>mid){
need++;
cur=0;
}
cur=cur+weight;
}
if(need<=D){
right=mid;
}
else{
left=mid+1;
}
}
return left;
}
};