狒狒吃香蕉(二分查找)

狒狒吃香蕉(二分查找)

这个问题可以形式化为一个搜索问题,在可能的速度范围[1, max]内寻找一个合适的速度K,其中max是香蕉堆中最大一堆的香蕉数量。 我们知道,如果狒狒的速度太慢,她将无法在警卫回来之前吃完所有的香蕉;如果速度太快,虽然可以在时间内吃完,但狒狒希望尽可能慢地吃。因此,我们需要找到这样一个临界速度K,它既是狒狒能够在H小时内吃完香蕉的最小速度,又确保狒狒能够慢慢享用。

通过二分查找,我们可以有效地缩小搜索范围,逐步逼近这个临界速度。在每一次迭代中,我们取当前速度范围的中点作为候选速度K,然后计算在这个速度下狒狒吃完所有香蕉所需的时间。如果这个时间不超过H小时,我们就可以尝试减慢速度;如果超过H小时,则必须加快速度。通过这种方式,我们最终能找到满足条件的最小速度K。

在实现二分查找的过程中,需要注意的是,当计算在某个速度下狒狒吃完香蕉所需的时间时,如果某一堆香蕉的数量小于这个速度,狒狒将在那个小时内吃掉这整堆香蕉,并且不会再吃更多的香蕉,下一个小时内才会开始吃另一堆。

综上所述,通过二分查找算法,我们可以高效地解决"狒狒吃香蕉"的问题,找到一个既符合时间限制又尽可能慢的速度K,让狒狒能够在享受美食的同时,不至于被警卫发现。

javascript 复制代码
var minEatingSpeed = function(piles, h) {
    let max = 0;
    for(let i of piles) {
        i > max ? max = i : null;
    }
    let rage = [1,max];
    let t, k ,v;
   while(rage[0] <= rage[1]) {
        v = Math.ceil((rage[0]+rage[1])/2);
        t = getHour(v);
        t > h ? (rage[0] = v+1) : (k = v, rage[1] = v-1);
    }
    return k;
    function getHour(k) {
        let t = 0;
        for(let i of piles) {
            t += Math.ceil(i/k);
        }
        // console.log(t);
        return t;
    }
};
相关推荐
徐新帅8 分钟前
4181:【GESP2603七级】拆分
c++·学习·算法·信奥赛
黎梨梨梨_16 分钟前
C++入门基础(下)(重载,引用,inline,nullptr)
开发语言·c++·算法
Jasmine_llq21 分钟前
《B4411 [GESP202509 二级] 优美的数字》
算法·暴力枚举算法·逐位校验算法·统一数位判断算法·条件计数算法·自定义函数判断算法
做时间的朋友。29 分钟前
小华地图寻宝
算法
贾斯汀玛尔斯33 分钟前
每天学一个算法--单调栈(Monotonic Stack)
运维·服务器·算法
ZPC821037 分钟前
ROS2 速度远快于 UDP的完整方案(同机节点)
人工智能·算法·计算机视觉·机器人
khalil10201 小时前
代码随想录算法训练营Day-34动态规划03 | 01背包问题 二维、01背包问题 一维、416. 分割等和子集
数据结构·c++·算法·leetcode·动态规划·背包问题·01背包
华清远见IT开放实验室1 小时前
AI 算法核心知识清单(深度实战版2)
人工智能·深度学习·算法·机器学习·ai·模型训练
ZC跨境爬虫1 小时前
UI前端美化技能提升日志day7:(原生苹方字体全局适配+合规页脚完整像素级落地)
前端·javascript·ui·html·交互
好运的阿财1 小时前
OpenClaw工具拆解之tts+web_search
前端·javascript·python·ai·ai编程·openclaw·openclaw工具