狒狒吃香蕉(二分查找)

狒狒吃香蕉(二分查找)

这个问题可以形式化为一个搜索问题,在可能的速度范围[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;
    }
};
相关推荐
0 0 014 小时前
CCF-CSP 37-3 模板展开(templating)【C++】
c++·算法
im_AMBER14 小时前
Leetcode 71 买卖股票的最佳时机 | 增量元素之间的最大差值
笔记·学习·算法·leetcode
bulingg14 小时前
聚类方法(kmeans,DBSCAN,层次聚类,GMM,EM算法)
算法·kmeans·聚类
lally.14 小时前
Kaggle Binary Classification with a Bank Dataset逻辑回归实现(准确率0.94539)
人工智能·算法·机器学习·逻辑回归
埃伊蟹黄面14 小时前
二分查找算法
c++·算法·leetcode
野蛮人6号14 小时前
力扣热题100道之78子集
算法·leetcode·职场和发展
不一样的少年_14 小时前
WebTab等插件出事后:不到100行代码,带你做一个干净透明的新标签页
前端·javascript·浏览器
幸运小圣14 小时前
关于Vue 3 <script setup> defineXXX API 总结
前端·javascript·vue.js
AAA阿giao14 小时前
从零开始:用 Vue 3 + Vite 打造一个支持流式输出的 AI 聊天界面
前端·javascript·vue.js
悦来客栈的老板14 小时前
AST反混淆实战|reese84_jsvmp反编译前的优化处理
java·前端·javascript·数据库·算法