写出来我还觉得不太可能,毕竟要遍历求和的?但是还真就是这样
class Solution {
public:
int minEatingSpeed(vector<int>& piles, int H) {
int size=piles.size();
sort(piles.begin(),piles.end());
if(size==H)
return piles[size-1];
int low=1,high=piles[size-1];
//这里其实求的是所有满足情况的下限
while(low<high)
{
int mid=low+(high-low)/2,res=0;
//这里菜了菜了,有点复杂了,求floor用(p-1)/mid+1更好
for(int p:piles) res+=p/mid+(p%mid>0);
if(res<=H)//所以high是一直满足要求的,low会不断向后
high=mid;
else
low=mid+1;
}
return high;
}
};