[Leetcode 875][Medium]-爱吃香蕉的珂珂-二分搜索

目录

一、题目描述

[二 、整体思路](#二 、整体思路)

[三 、代码](#三 、代码)


一、题目描述

原题地址

二 、整体思路

题目要求在时间h内(含h),求解最小速度k。那么首先要知道速度与吃香蕉所用时间的关系。

假设速度为k,那么吃香蕉所用时间t就等于每堆香蕉piles[i]除以速度k所得的向上取整的商之和。

下一步,找出最小的k。同时发现k的上限是max(piles[i]),下限是1。根据上述公式发现k与t存在单调性。因此可以用二分搜索,找出>=h对应的速度的k的最小值。具体来说就是k对应的时间t=h时,要让k尽量小。k对应的时间t<=h时,说明mid值可能为答案,要保留,同时继续寻找潜在的比mid更小的k即r=mid。k对应的时间t>h时,说明当前吃香蕉速度k不够大,因此l=mid+1。

三 、代码

java 复制代码
class Solution {
    public int minEatingSpeed(int[] piles, int h) {

        int l=1,r=0;
        for(int pile:piles){
            r=Math.max(pile,r);
        }
        //求解>=h对应的speed的最小值
        while(l<r){
            int mid=l+(r-l)/2;
            if(eatingtime(mid,piles)<=h) r=mid;
            else l=mid+1;
        }
        return l;
    }
    public int eatingtime(int k,int[] piles){
        int ans=0;
        for(int i=0;i<piles.length;i++){
            ans+=(piles[i]-1)/k+1;
        }
        return ans;
    }
}
相关推荐
慕容青峰6 分钟前
【LeetCode 1925. 统计平方和三元组的数目 题解】
c++·算法·leetcode
冰西瓜6007 分钟前
动态规划(一)算法设计与分析 国科大
算法·动态规划
TL滕13 分钟前
从0开始学算法——第十一天(字符串基础算法)
笔记·学习·算法
roman_日积跬步-终至千里1 小时前
【计算机算法与设计(10)】习题:苹果买卖问题——分治法的经典应用
算法
deepdata_cn1 小时前
模型预测控制(MPC)算法
算法
独自破碎E1 小时前
如何用最短替换让字符串变平衡?
java·开发语言·算法·leetcode
Jasmine_llq1 小时前
《P1082 [NOIP 2012 提高组] 同余方程》
算法·数学建模·质因数分解(试除法)·快速幂(模幂运算)·欧拉函数计算·基于质因数分解
算家计算1 小时前
AI真的懂你!阿里发布Qwen3-Omni-Flash 全模态大模型:超强交互,人设任选
人工智能·算法·机器学习
l1t1 小时前
利用Duckdb求解Advent of Code 2025第9题 最大矩形面积
数据库·sql·算法·duckdb·advent of code
Swift社区1 小时前
LeetCode 446 - 等差数列划分 II - 子序列
算法·leetcode·职场和发展