[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;
    }
}
相关推荐
木木子2217 分钟前
# 猜数字游戏 — HarmonyOS交互逻辑与随机算法实现
算法·游戏·华为·交互·harmonyos
stolentime41 分钟前
SP8549 MAIN75 - BST again题解
c++·算法·二叉树·深度优先·图论·记忆化搜索·组合数学
stolentime1 小时前
AT_pakencamp_2020_day1_k Gcd of Sum题解
c++·算法
2601_956121971 小时前
map_计蒜客T1271 完美K倍子数组
c++·算法
编程圈子2 小时前
电机驱动开发学习19. 霍尔 BLDC 三段式 FOC 启动算法
驱动开发·学习·算法
Hello_Damon_Nikola2 小时前
伺服电机堵转检测算法详解
单片机·嵌入式硬件·算法
罗小罗同学2 小时前
安德森癌症中心发表SCOPE IO模型,实现了对罕见肿瘤帕博利珠单抗疗效的精准预测,在患者早期即可预判药效
人工智能·算法·医学图像处理·医学ai
变量未定义~3 小时前
Tarjan算法-强连通分量、路径、出差
算法
geovindu3 小时前
CSharp: Iterative Algorithms
开发语言·后端·算法·c#·.net·迭代算法
道影子3 小时前
《黄帝内经》021章|津凝精晶 沉降为患
人工智能·深度学习·神经网络·算法·机器学习