二分+ 贪心
class Solution {
public:
bool _WithDays(vector<int>& weights, int cap, int D){
int day_cap=0;
int total_days=0;
int flag=0;
for(int i=0;i<weights.size();i++){
day_cap += weights[i];
// cout<<day_cap<<endl;
if(day_cap >cap){
day_cap =weights[i];
total_days +=1;
// if(i==weights.size()-1) flag =1;
}
}
total_days+=1;
// cout<< total_days<<endl;
return total_days<=D;
}
int binary_search(vector<int>& weights, int left, int right, int D){
while( left< right){
int mid_cap = left + (right-left)/2;
if(_WithDays(weights, mid_cap, D)) right =mid_cap;
else left =mid_cap+1;
// cout<<"left"<<left<<" right"<< right<<endl;
}
return left;
}
int shipWithinDays(vector<int>& weights, int D) {
// cout<<_WithDays(weights,15,D);
int right=0;
int left=0;
for(auto & w:weights){
right += w;
left =max(left, w);
}
// cout<< _WithDays(weights,32,1)<<endl;
// return 0;
return binary_search(weights, left, right, D);
}
};