【二分查找】力扣 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;
    }
}
相关推荐
sylviiiiiia14 分钟前
leetcode hot100
python·算法·leetcode
纪伊路上盛名在27 分钟前
Kabsch算法的Julia实现
开发语言·算法·julia·序列分析·蛋白质·rmsd
裕晟资质规划44 分钟前
军工保密资质二级申报的四个可量化硬条件:条文位置、数值口径与西安配套企业实务要点
java·服务器·网络·数据库·算法
LuminousCPP44 分钟前
数据结构-排序(一):基础排序算法横向对比|冒泡、插入、希尔、堆与双向选择,详解二分 / Knuth 增量
c语言·数据结构·笔记·算法·排序算法
Nil2081 小时前
leetcode 46全排列
算法·leetcode·职场和发展
辰烨chenye1 小时前
LeetCode Hot 100 题解 · 动态规划篇
算法·leetcode·动态规划
青山木1 小时前
Hot 100 --- 买卖股票的最佳时机
java·数据结构·算法·leetcode·贪心算法
wlkdb2 小时前
大模型/Agent 时代下的视觉算法
图像处理·算法·计算机视觉
sali-tec2 小时前
C# 基于OpenCv的视觉工作流-章107-光流追踪
图像处理·人工智能·opencv·算法·计算机视觉
测试19982 小时前
Jmeter接口自动化生成测试报告html格式详解
自动化测试·python·测试工具·jmeter·职场和发展·测试用例·接口测试