爱吃香蕉的珂珂

题目链接

爱吃香蕉的珂珂

题目描述

注意点

  • piles.length <= h <= 10^9
  • 如果某堆香蕉少于k根,将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉
  • 返回可以在 h 小时内吃掉所有香蕉的最小速度 k(k 为整数)

解答思路

  • 二分查找找到在 h 小时内吃掉所有香蕉的最小速度k,已知珂珂保证在h小时内吃完所有香蕉时最快速度max为Math.max(piles),吃香蕉的最慢速度min为1(但是不保证在h小时内能吃完所有香蕉),min和max就是二分查找的左右边界,在二分查找时,每次找到左右边界的中间点mid判断mid速度能否在h小时内吃完,如果能则max = mid - 1,如果不能则min = mid + 1,找到满足吃完香蕉的最慢速度即可

代码

java 复制代码
class Solution {
    public int minEatingSpeed(int[] piles, int h) {
        int min = 1;
        int max = 0;
        for (int pile : piles) {
            max = Math.max(max, pile);
        }
        while (min <= max) {
            int mid = min + (max - min >> 1);
            long time = 0;
            for (int pile : piles) {
                // 不能整除则向上取整
                time += (pile + mid - 1) / mid;
            }
            if (time > h) {
                min = mid + 1;
            } else {
                max = mid - 1;
            }
        }
        return min;
    }
}

关键点

  • 二分查找的思想
  • 如果某堆香蕉少于k根,将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉
  • 找到在h小时内吃完所有香蕉的最慢速度
相关推荐
爱读源码的大都督13 小时前
挑战一下,用Java手写Transformer,先手写QKV,能成功吗?
java·后端·程序员
华仔啊13 小时前
面试官灵魂拷问:count(1)、count(*)、count(列)到底差在哪?MySQL 性能翻车现场
java·后端
Boop_wu13 小时前
[数据结构] LinkedList
数据结构
用户03321266636713 小时前
在Word 中插入页眉页脚:实用 Java 指南
java
奔跑吧邓邓子13 小时前
【Java实战㊱】Spring Boot邂逅Redis:缓存加速的奇妙之旅
java·spring boot·redis·缓存·实战
杨杨杨大侠13 小时前
Atlas-Event:高性能事件处理与监控系统
java·github·eventbus
杨杨杨大侠13 小时前
Atlas Event:解锁事件驱动的潜能
java·github·eventbus
兴科Sinco13 小时前
[leetcode 1]给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数[力扣]
python·算法·leetcode
失散1313 小时前
分布式专题——4 大厂生产级Redis高并发分布式锁实战
java·redis·分布式·缓存·架构
沐怡旸13 小时前
【算法--链表】138.随机链表的复制--通俗讲解
算法·面试