当前位置: 首页 > news >正文

狒狒吃香蕉(二分查找)

狒狒吃香蕉(二分查找)

在这里插入图片描述

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

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

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

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

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;
    }
};

相关文章:

  • CompletableFuture使用
  • 【git基本使用】
  • HCIA12 NAT网络地址转换实验
  • Python搭建自己的VPN
  • CAP理论
  • Linux命令详解(2)
  • Android shell 常用 debug 命令
  • 20240612前端问题总结
  • java多线程临界区介绍
  • 【Python】使用OpenCV特征匹配检测图像中的【特定水印】
  • 如何从微软官方下载Edge浏览器的完整离线安装包
  • FISCO BCOS x GitLink,为国产开源技术生态注入新活力
  • 【源码】校园小情书小程序最新版 校园小程序开发 微信情书小程序 校园小情书小程序源代码
  • 探索密码哈希技术:原理、实现与安全性
  • 7、Spring之Bean生命周期~初始化
  • Linux内核 -- ftrace 调试工具培训
  • 【APP移动端自动化测试】第二节.Appium介绍和常用命令代码实现
  • PPT设置为本框的默认格式以及固定文本框
  • CorelDRAW2024官方最新中文破解版Crack安装包网盘下载安装方法
  • golang使用WaitGroup等待多个协程执行完成
  • “五一”假期银联、网联共处理支付交易234.39亿笔
  • 牛市早报|“五一”假期预计跨区域人员流动量累计14.67亿人次
  • 许昌市场监管部门对胖东来玉石开展日常检查:平均毛利率不超20%
  • 国铁集团:全国铁路旅客发送量连续3天同比增幅超10%
  • 英国地方选举结果揭晓,工党保守党皆受挫
  • 两部门发布“五一”假期全国森林草原火险形势预测