代码

package com.xcrj;/*** 剑指 Offer II 073. 狒狒吃香蕉* 狒狒喜欢吃香蕉。这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 h 小时后回来。* 狒狒可以决定她吃香蕉的速度 k (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 k 根。如果这堆香蕉少于 k 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉,下一个小时才会开始吃另一堆的香蕉。* 狒狒喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。* 返回她可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)。* <p>* 分析* - 求狒狒在h小时内能够吃完所有香蕉的最小速度k* - piles[],len为香蕉堆数,下标为第i堆香蕉,值为第i堆有多少根香蕉* - 1小时最多只能吃1堆香蕉*/
public class Solution73 {/*** 二分法*/public int minEatingSpeed(int[] piles, int h) {/***  l是吃香蕉的最小速度*  r是吃香蕉的最大速度*  l=1,因为狒狒1h至少吃一根香蕉*/int lSpeed = 1;// r=Max(piles),因为狒狒1h最多吃一堆香蕉,所以需要求piles[]中的最大值int rSpeed = 0;for (int pile : piles) {rSpeed = Math.max(rSpeed, pile);}// 二分法查找 速度k/1h 在h小时内能够吃完所有香蕉的最小速度kint k = rSpeed;while (lSpeed < rSpeed) {int midSpeed = ((rSpeed - lSpeed) >> 1) + lSpeed;long timeSum = getTime(piles, midSpeed);// 若吃完所有香蕉实际花费总时间<给定时间,则减小速度,则速度靠左边移动// 为什么能求最小速度k,因为进入这个if后速度向更低速度折半if (timeSum <= h) {// 求最小速度k,所以k放到这k = midSpeed;rSpeed = midSpeed;}// 若吃完所有香蕉实际花费总时间>给定时间,则增大速度,则速度靠右边移动else {lSpeed = midSpeed + 1;}}return k;}/*** 狒狒以速度speed吃完成所有香蕉花费的时间* 注意:1堆里面至少有1根香蕉,因此狒狒吃香蕉的最小速度是 1根/h 1根1小时** @param piles 所有堆香蕉* @param speed 狒狒吃香蕉的速度 根数/h 1小时吃多少根香蕉*/public long getTime(int[] piles, int speed) {long timeSum = 0;for (int pile : piles) {/***  1小时最多只能吃1堆香蕉*  - (pile) / speed, 向上取整 =(pile + speed) / speed**  1堆香蕉至少有1根香蕉,狒狒1小时至少吃1根香蕉*  - (pile + speed - 1) / speed,因为pile和speed都>0*  例如,当pile=1,speed等于1时,(pile + speed) / speed=2,(pile + speed - 1) / speed=1*/timeSum += (pile + speed - 1) / speed;}return timeSum;}
}

参考

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/nZZqjQ/solution/fei-fei-chi-xiang-jiao-by-leetcode-solut-0jge/
来源:力扣(LeetCode)

leetcode/狒狒吃香蕉相关推荐

  1. 剑指offer_073 狒狒吃香蕉

    题目: 狒狒喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回来. 狒狒可以决定她吃香蕉的速度 K (单位:根/小时).每个小时,她将会选择一 ...

  2. 剑指offer73:狒狒吃香蕉

    题目: 狒狒喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回来. 狒狒可以决定她吃香蕉的速度 K (单位:根/小时).每个小时,她将会选择一 ...

  3. 剑指offer 专项突破版 73、狒狒吃香蕉

    题目链接 思路 这个也是范围内的查找,一开始可以确定狒狒的速度区间应该是[1,maxVal],但是有两个细节需要注意 如何通过piles数组和speed计算时间 result += (pile + s ...

  4. LeetCode 875. 爱吃香蕉的珂珂(二分查找)

    1. 题目 珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回来. 珂珂可以决定她吃香蕉的速度 K (单位:根/小时).每个小时,她将会选 ...

  5. Python描述 LeetCode 875. 爱吃香蕉的珂珂

    Python描述 LeetCode 875. 爱吃香蕉的珂珂   大家好,我是亓官劼(qí guān jié ),在[亓官劼]公众号.CSDN.GitHub.B站等平台分享一些技术博文,主要包括前端开 ...

  6. leetcode系列--875.爱吃香蕉的珂珂

    leetcode系列–第875题.爱吃香蕉的珂珂 珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回来. 珂珂可以决定她吃香蕉的速度 K ...

  7. leetcode 875. 爱吃香蕉的珂珂 koko eating bananas

    一.题目描述 珂珂喜欢吃香蕉.这里有 n 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 h 小时后回来. 珂珂可以决定她吃香蕉的速度 k (单位:根/小时).每个小时,她将会 ...

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

    Leetcode 875.爱吃香蕉的珂珂 1 题目描述(Leetcode题目链接)   珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H 小时后回 ...

  9. leetcode 875.爱吃香蕉的珂珂(koko eating bananas)C语言

    leetcode 875.爱吃香蕉的珂珂(koko eating bananas)C语言 1.description 2.solution 1.description https://leetcode ...

最新文章

  1. cocos2dx 字体外发光_Ps教程:只需4个图层!即可制作出超炫酷的荧光字体
  2. C++总结笔记(七)—— 运算符重载
  3. angular五大服务顺序,angularJS $事件处理程序的触发顺序
  4. 源码级别的广播与监听实现
  5. (cons '(贰 . 输入/输出) 《为自己写本-Guile-书》)
  6. 吴恩达 Deeplearning深度学习笔记v5.7 最新PDF版 免积分下载
  7. python卸载pip_python 怎样卸载pip
  8. 深度残差网络+自适应参数化ReLU激活函数:调参记录2
  9. Java实现八皇后问题
  10. 公交线路换乘代码PHP,北京公共交通集团-|线路查询|公交换乘|商务班车|定制公交|公交e路通|实时公交...
  11. stm32h7内存分配_【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量和堆栈...
  12. PCF8563使用心得
  13. 【pcre 依赖】linux安装pcre 依赖
  14. 工业网关控制器CK-GW06-E01与欧姆龙 PLC配置说明
  15. 全球最值得听的100首英文歌
  16. html5腾讯地图自动定位,移动web端使用腾讯地图实现定位功能
  17. MVC5怎么设置默认访问页
  18. 明星扎堆,王嘉儿,张艺兴,娜扎,赵丽颖,陈小春,应采儿 给您拜年啦!!!...
  19. 指代消解系列(1)-综述
  20. 产品经理必备 | 优秀PPT四要素:视觉、内容、演讲和情绪

热门文章

  1. 使用poi实现Excel的数据分页导出(很全),线上项目可用
  2. Android自定义控件(二) Android下聚光灯实现
  3. Python · 实现鼠标绘画
  4. 威纶触摸屏485轮询通讯_威伦TK6070IH怎么跟200 Smart PPI通讯-工业支持中心-西门子中国...
  5. linux将py变成exe文件,使用py2exe将Python 脚本生成exe可执行文件
  6. 严厉!32篇硕士论文“不合格”,同门论文将被重点抽查!
  7. Interbase默认用户名和密码。
  8. 2019年年度总结-十年
  9. scala 隐式详解(implicit关键字)
  10. Android的简单介绍