狒狒吃香蕉(二分查找)

狒狒吃香蕉(二分查找)

这个问题可以形式化为一个搜索问题,在可能的速度范围[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;
    }
};
相关推荐
viqecel2 分钟前
页面滚动下拉时,元素变为fixed浮动,上拉到顶部时恢复原状,js代码以视频示例
前端·javascript·ajax·滚动下拉浮动
太阳照常升起3664 分钟前
机试准备第一天
算法
Non importa7 分钟前
【初阶数据结构】线性表之单链表
数据结构·考研·算法·链表·github·学习方法
fanstuck21 分钟前
如何快速准备数学建模?
算法·数学建模·数据挖掘
布兰妮甜21 分钟前
Three.js 数学工具:构建精确3D世界的基石
javascript·3d·three.js·数学工具
半兽先生34 分钟前
vue video重复视频 设置 srcObject 视频流不占用资源 减少资源浪费
前端·javascript·vue.js
Static_Xiao37 分钟前
C语言导航 7.1函数的概念与定义
c语言·数据结构·算法
萌の鱼39 分钟前
leetcode 53. 最大子数组和
数据结构·c++·算法·leetcode
水水阿水水44 分钟前
第二章:面向对象之封装(一)
开发语言·c++·算法
圆圆滚滚小企鹅。1 小时前
刷题记录 回溯算法-5:17.电话号码的字母组合
数据结构·python·算法·leetcode