Leetcode第875题 爱吃香蕉的珂珂 C++解法

写出来我还觉得不太可能,毕竟要遍历求和的?但是还真就是这样

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;
    }
};

猜你喜欢

转载自blog.csdn.net/meixingshi/article/details/113892264