一、题目描述

珂珂喜欢吃香蕉。这里有 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

二、解题思路

由于速度是一个有范围的整数,因此可以使用「二分查找法」找到这个有范围的整数。分析这个问题的具有的 单调性 是解题的关键。

二分查找

思路分析:

  • 根据题意可以知道:珂珂吃香蕉的速度越小,耗时越多。反之,速度越大,耗时越少,这是题目的 单调性
  • 我们要找的是速度。因为题目限制了珂珂一个小时之内只能选择一堆香蕉吃,因此速度最大值就是这几堆香蕉中,数量最多的那一堆。速度的最小值是 11,其实还可以再分析一下下界是多少,由于二分搜索的时间复杂度很低,严格的分析不是很有必要;
  • 还是因为珂珂一个小时之内只能选择一堆香蕉吃,因此:每堆香蕉吃完的耗时 = 这堆香蕉的数量 / 珂珂一小时吃香蕉的数量。根据题意,这里的 / 在不能整除的时候,需要 上取整。

注意:当「二分查找」算法猜测的速度恰好使得珂珂在规定的时间内吃完香蕉的时候,还应该去尝试更小的速度是不是还可以保证在规定的时间内吃完香蕉。

这是因为题目问的是「最小速度 」。

三、代码实现

java版

public class Solution {public int minEatingSpeed(int[] piles, int H) {int maxVal = 1;for (int pile : piles) {maxVal = Math.max(maxVal, pile);}// 速度最小的时候,耗时最长int left = 1;// 速度最大的时候,耗时最短int right = maxVal;while (left < right) {int mid = left + (right - left) / 2;if (calculateSum(piles, mid) > H) {// 耗时太多,说明速度太慢了,下一轮搜索区间是 [mid + 1..right]left = mid + 1;} else {right = mid;}}return left;}/*** 如果返回的小时数严格大于 H,就不符合题意** @param piles* @param speed* @return 需要的小时数*/private int calculateSum(int[] piles, int speed) {int sum = 0;for (int pile : piles) {// 上取整可以这样写sum += (pile + speed - 1) / speed;}return sum;}
}

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/koko-eating-bananas

leetcode 875. 爱吃香蕉的珂珂 koko eating bananas相关推荐

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

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

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

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

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

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

  4. leetcode 875. 爱吃香蕉的珂珂

    875. 爱吃香蕉的珂珂 class Solution {public:int minEatingSpeed(vector<int>& piles, int H) {long le ...

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

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

  6. Leetcode 875 爱吃香蕉的珂珂 (C++题解)

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

  7. LeetCode 875.爱吃香蕉的珂珂

    1. 题目 原题链接 https://leetcode-cn.com/problems/koko-eating-bananas/ 题目描述 珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 pile ...

  8. Leetcode 875. 爱吃香蕉的珂珂

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

  9. 妮妮喜欢吃桃子 java_Leetcode之二分法专题-875. 爱吃香蕉的珂珂(Koko Eating Bananas)...

    Leetcode之二分法专题-875. 爱吃香蕉的珂珂(Koko Eating Bananas) 珂珂喜欢吃香蕉.这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉.警卫已经离开了,将在 H ...

最新文章

  1. Spring Cloud剖析--云平台技术栈17
  2. CV:基于face库利用cv2调用摄像头(或视频)根据人脸图片实现找人(先指定要识别已知人脸的文件夹转为numpy_array+输入新图片遍历已有numpy_array)
  3. 【转】Linux面试题集锦
  4. android 6.0 dm-verity技术,Android 7.0安全性大幅提升,要求严格强制执行验证启动
  5. HDFS balancer 异常处理
  6. docker 安装 sqlserver 数据库
  7. python语言开发平台_Go+Python双语言混合开发
  8. 技术检验检测管理系统之样品检验模块概况(四)
  9. 怎么强制弹出窗口永远在最前面
  10. Eclipse如何重置窗口
  11. 测测你写了多少行代码【转】
  12. AsyncTask--源码心得
  13. 用例规约要细致到万无一失吗?
  14. [转]跨域资源共享 CORS 详解
  15. Axure中引入Echarts图表并制作元件库
  16. 《Java性能优化权威指南》读书笔记
  17. oracle只有dbf文件能不能恢复,Oracle 误删DBF文件恢复
  18. A股市场周内效应研究
  19. 思维导图带你了解22个职场学习网站!亲测好用
  20. 代码封装的思想,竟然在中国古代就已经存在了

热门文章

  1. 狂神说SpringCloud学习笔记(附带源码和笔记)
  2. 从全职高手开始的系统_第一章 全职高手系统
  3. 软件测试经典书籍推荐
  4. ESP32C3驱动中景园ST7789tft屏
  5. 【安信可NB-IoT模组EC系列应用笔记⑤】安信可微信公众号北斗定位显示EC-01F+GP-01模组
  6. 使用Python爬取微信群里的百度云资源
  7. 使用浏览器工具调试学习网页
  8. 直通车API让其进入技术化时代
  9. 计算机网络与通信原理——端口
  10. 2016年下半年信息系统项目管理师真题及答案_信息系统项目管理师历年真题及权威答案_信息系统项目管理师试题及模拟题_软考考试题库_希赛网...