• LeetCode 875. Koko Eating Bananas


    LeetCode 875. Koko Eating Bananas (爱吃香蕉的珂珂)

    题目

    链接

    https://leetcode-cn.com/problems/koko-eating-bananas/

    问题描述

    珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。

    珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。

    珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。

    返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。

    示例

    输入: piles = [3,6,7,11], H = 8
    输出: 4

    提示

    1 <= piles.length <= 10^4
    piles.length <= H <= 10^9
    1 <= piles[i] <= 10^9

    思路

    思路是一步步发展的,我们需要求最小速度k,k越大吃的越快,越小吃的越慢,并且有范围,那么可以遍历。

    k与吃完的时间可以说是单调性,为了节约时间,可以采用二分法来计算。

    eatTime可以计算出当前速度需要吃多久,之后借助二分来计算最小速度,这就等于是二分法求左边界。

    复杂度分析

    时间复杂度 O(nlogn)
    空间复杂度 O(1)
    

    代码

    Java

        static int eatTime(int[] piles, int x) {
            int hours = 0;
            for (int i = 0; i < piles.length; i++) {
                hours += piles[i] / x;
                if (piles[i] % x > 0) {
                    hours++;
                }
            }
            return hours;
        }
    
        public static int minEatingSpeed(int[] piles, int H) {
            int left = 1;
            int right = 0;
            for (int pile : piles) {
                if (pile > right) {
                    right = pile;
                }
            }
    
            while (left < right) {
                int mid = left + (right - left) / 2;
                int hour = eatTime(piles, mid);
                if (hour < H) {
                    right = mid - 1;
                } else if (hour > H) {
                    left = mid + 1;
                } else if (hour == H) {
                    right = mid;
                }
            }
            return left;
        }
    
  • 相关阅读:
    4月21日Java作业
    5.14 Java作业
    第十周java作业
    4月30号作业
    第七周上机
    4.9Java
    通宵看剧有感
    error: pathspec 'xxxxxxxxx' did not match any file(s) known to git
    markdown格式测试
    博客申请通过啦
  • 原文地址:https://www.cnblogs.com/blogxjc/p/15990087.html
Copyright © 2020-2023  润新知