2022-06-07 「875. 爱吃香蕉的珂珂」

今日中等题:https://leetcode.cn/problems/koko-eating-bananas/

刚开始看题目的时候觉得很简单,因为题目给的几个样例中,h和piles的长度相等时,就是最简单的,速度等于最大堆香蕉根数就是答案。
仔细思考之后发现,其他情况没办法穷举,无奈看了题解,发现是使用二分法,夹逼出答案。

这里需要注意一个点,就是向上取整时,如果本身能整除时不需要+1。

贴代码吧,这题也没有什么其他花样,就看能否想到二分法了。

class Solution {
    public int minEatingSpeed(int[] piles, int h) {
        Arrays.sort(piles);
        int len = piles.length;
        
        // 最大速度是最大根数,最小速度是1,取中间值
        int min = 1, max = piles[len - 1];

        while (min < max) {
            int mid = (min + max) / 2;
            if (time(piles, mid) > h) {
                min = mid + 1;
            }
            else {max = mid;}
        }
        return min;
    }

    // 向上取整算时间
    public int time(int[] piles, int speed) {
        int sum = 0;
        for (int pile : piles) {
            sum += (pile + speed - 1) / speed;
        }
        return sum;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容