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

目录

一、题目描述

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

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


一、题目描述

原题地址

二 、整体思路

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

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

即。

下一步,找出最小的k。同时发现k的上限是max(pilesi),下限是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;
    }
}
相关推荐
怕浪猫7 小时前
RAG 面试 6 连问,从原理到优化全部覆盖
python·算法·面试
无线通信科研笔记7 小时前
IEEE TVT 2026 论文精读与完整复现|相位误差如何重塑近场 RIS 的幅相响应
论文阅读·人工智能·python·算法·论文笔记
mmmmath_38 小时前
二叉树の递归遍历
算法
All for pursuit.9 小时前
【位运算-1】338.比特位计数
数据结构·c++·算法·leetcode
小师兄吃牛肉9 小时前
C语言中的nullptr有必要吗
c语言·c++·算法
一只小小的芙厨11 小时前
【线性DP】
学习·算法·动态规划
奋发向前wcx11 小时前
CSP-J复赛模拟赛5 王晨旭补题 2026.10.5
算法
罗湖老棍子13 小时前
C Looooops(信息学奥赛一本通- P1640)
算法·数论·同余·裴蜀定理·扩展欧几里得
Interview Aid11214 小时前
OpenAI SWE 面试流程
面试·职场和发展
我命由我1234514 小时前
Photoshop - Photoshop 使用对齐功能定位元素
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·学习方法