二分法应用:875. 爱吃香蕉的珂珂

875. 爱吃香蕉的珂珂

思路分析

我们要找的是速度。因为题目限制了珂珂一个小时之内只能选择一堆香蕉吃,因此速度的最小值肯定需要大于等于 1,同时也要小于等于这几堆香蕉中,数量最多的那一堆。

还是因为珂珂一个小时之内只能选择一堆香蕉吃,因此:每堆香蕉吃完的耗时 = 这堆香蕉的数量 / 珂珂一小时吃香蕉的数量。根据题意,这里的 / 在 不能整除 的时候,需要 向上取整

代码实现

class Solution {
    
    
    public int minEatingSpeed(int[] piles, int H) {
    
    
        int maxVal = 1;
        for (int pile : piles) {
    
    
            maxVal = Math.max(maxVal,pile);
        }
        int left = 1,right = maxVal;
        while (left <= right) {
    
    
            int mid = left + (right - left) / 2;
            if (calculateTime(piles,mid) > H) {
    
    
                left = mid + 1;
            } else {
    
    
                right = mid - 1;
            }
        }
        return left;
    }

    private int calculateTime(int[] piles, int speed) {
    
    
        int time = 0;
        for (int pile : piles) {
    
    
            // 向上取整可以这么写
            time += (pile + speed - 1) / speed;
        }
        return time;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_36389060/article/details/124344526