• LeetCode No875. 爱吃香蕉的珂珂


    题目

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

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

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

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

    示例 1:

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

    示例 2:

    输入:piles = [30,11,23,4,20], h = 5
    输出:30

    示例 3:

    输入:piles = [30,11,23,4,20], h = 6
    输出:23

    提示:

    1 <= piles.length <= 104
    piles.length <= h <= 109
    1 <= piles[i] <= 109

    思路

    二分思想,想要以最小的速度在h小时内吃完,二分枚举速度,求最小的速度x,满足∑(piles[i]/x)<=h。

    AC代码

    点击查看代码
    class Solution {
    
        private int calcCount(int[] arr, int target) {
            int cnt = 0;
            for(int num: arr) {
                cnt += ( num - 1 ) / target + 1;
            }
            return cnt;
        }
    
        public int minEatingSpeed(int[] piles, int h) {
            int len = piles.length;
            // Arrays.sort(piles);
            int low = 1;
            int high = (int)1e9;
            // 二分
            while( low<high ) {
                int mid = (low+high)/2;
                int cnt = calcCount(piles, mid);
                // System.out.println( " mid = " + mid + " cnt = " + cnt);
                if( cnt<=h ) {
                    high = mid ;
                } else {
                    low = mid + 1;
                }
            }
            return low;
        }
    }
    
  • 相关阅读:
    用FileSystemWatcher监视文件系统
    生成随机汉字验证码
    MySQL学习笔记二
    python高级学习笔记
    boost bind 表达式中的是值语义还是指针语义?
    容器与适配器的个人总结
    subversion linux使用方法
    boost asio(初学示例)
    MySQL学习笔记一
    subversion 命令
  • 原文地址:https://www.cnblogs.com/Asimple/p/16353952.html
Copyright © 2020-2023  润新知