875. Koko Eating Bananas

理解
题目要求koko在H小时内吃完piles[]堆香蕉的最小速度;
给定的限制条件是1 <= piles[i] <= 10^9,即可能的最小速度是1,最大速度是1e9;

思路
看完上面的理解,应该可以立马得出二分的左右值,即左值为1,右值为1e9;

重点
考察二分法的运用;
在代码中,一开始我计算了左右值,需要做一次遍历,相对直接从限制条件给出左右值,耗费了一点时间;
代码

class Solution {
public:
    int minEatingSpeed(vector<int>& piles, int H) {
//         int minspeed = 1;
//         int maxspeed = 0;
//         for(int i=0; i<piles.size(); i++){
//             maxspeed = max(maxspeed, piles[i]);
//         }
        
        // int left = minspeed;
        // int right = maxspeed;
        int left = 1;
        int right = 1e9;
        while(left < right){
            int mid = (left + right)/2;
            int cnt = 0;
            for(int i=0; i<piles.size(); i++){
                cnt += piles[i]/mid;
                if(piles[i]%mid)
                    cnt++;
            }
            if(cnt > H){
                left = mid + 1; 
            }else{
                right = mid;
            }
        }
        return left;
    }
};