狒狒吃香蕉(二分查找)

狒狒吃香蕉(二分查找)

这个问题可以形式化为一个搜索问题,在可能的速度范围[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;
    }
};
相关推荐
1104.北光c°1 分钟前
滑动窗口HotKey探测机制:让你的缓存TTL更智能
java·开发语言·笔记·程序人生·算法·滑动窗口·hotkey
wuhen_n1 小时前
网络请求在Vite层的代理与Mock:告别跨域和后端依赖
前端·javascript·vue.js
仰泳的熊猫4 小时前
题目2570:蓝桥杯2020年第十一届省赛真题-成绩分析
数据结构·c++·算法·蓝桥杯
无极低码7 小时前
ecGlypher新手安装分步指南(标准化流程)
人工智能·算法·自然语言处理·大模型·rag
软件算法开发8 小时前
基于海象优化算法的LSTM网络模型(WOA-LSTM)的一维时间序列预测matlab仿真
算法·matlab·lstm·一维时间序列预测·woa-lstm·海象优化
superior tigre8 小时前
22 括号生成
算法·深度优先
努力也学不会java9 小时前
【缓存算法】一篇文章带你彻底搞懂面试高频题LRU/LFU
java·数据结构·人工智能·算法·缓存·面试
旖-旎10 小时前
二分查找(x的平方根)(4)
c++·算法·二分查找·力扣·双指针
用头发抵命10 小时前
Vue 3 中优雅地集成 Video.js 播放器:从组件封装到功能定制
开发语言·javascript·ecmascript