【二分查找】力扣 875. 爱吃香蕉的珂珂

一、题目

二、思路

  • 速度 k(单位:根/小时)是存在一个取值范围的。
    • 速度越大肯定在规定的时间之内一定会吃完全部的香蕉,但也是可以确定出一个上界的。由于只要保证一小时之内,可以吃完香蕉数目最多的那一堆的香蕉,那么其他数目更小的香蕉在1小时之内肯定都是可以吃完的,那么 k 的最大值就是数组的最大值。
    • k 肯定不为 0,又是整数,确定其最小值为 1.
    • k ∈ 1, max_pile
  • 采用二分查找进行寻找 k 的最小值。

三、代码

java 复制代码
class Solution {
    public int minEatingSpeed(int[] piles, int h) {
        int n = piles.length;
        // 确定 k 的搜索范围
        int l = 1, r = 0;
        for (int pile : piles) {// 找到香蕉数量最多的为 k 的最大值
            r = Math.max(r, pile);
        }
        // 范围内进行二分查找
        while (l <= r) {
            int mid = l + (r - l)/2;
            if (check(piles, h, mid)) {// 检查当前速度 k 是否能够在规定时间 h 内将全部香蕉吃完
                r = mid - 1;// 能吃完说明当前 k 较大,收缩右边界
            } else {
                l = mid + 1;// 不能吃完说明当前 k 较小,收缩左边界
            }
        }
        return l;
    }
    public boolean check(int[] piles, int h, int mid) {
        int sum = piles.length;
        for (int pile : piles) {
            sum += (pile - 1) / mid;
            if (sum > h) {
                return false;
            }
        }
        return true;
    }
}
相关推荐
cpp_25015 小时前
P1540 [NOIP 2010 提高组] 机器翻译
数据结构·c++·算法·队列·noip·洛谷题解
晚笙coding6 小时前
LeetCode 98:验证二叉搜索树 —— 从局部判断到全局范围约束的递归思想
算法·leetcode·职场和发展
学计算机的计算基6 小时前
回溯算法下篇:四道经典题讲透约束剪枝、原地标记、预计算与状态压缩
java·笔记·算法
霸道流氓气质6 小时前
SpringBoot中实现告警判定算法-位报警与模拟量阈值-技术详解
spring boot·算法·jquery
行者全栈架构师6 小时前
混元 Hy3 Agent 实战:季度报告 3 小时变 40 分钟
算法·架构·代码规范
兰令水7 小时前
hot100【acm版】【2026.7.21打卡-java版本】
java·开发语言·算法·leetcode·面试
好好沉淀7 小时前
主键选择(自增 vs UUID vs 雪花算法)
java·算法
退休倒计时8 小时前
【每日一题】LeetCode 131. 分割回文串 TypeScript
算法·leetcode·typescript
小白说大模型8 小时前
AI Agent 调试实战:链路追踪、Prompt 可视化与异常定位的系统方法
java·人工智能·python·算法·prompt
梅梅绵绵冰8 小时前
算法题-矩阵
数据结构·算法·矩阵