码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【LeetCode75】第五十六题 爱吃香蕉的珂珂


    目录

    题目:

    示例:

    分析:

    代码:


    题目:

    示例:

    分析:

    这道题挺炸裂的,题目给我们一个数组,数组里的每个元素表示每个仓库里的香蕉数量。

    珂珂可以自己控制自己吃香蕉的速度,也就是每小时可以吃几根香蕉,不过同一个小时只会待在同一个仓库里,也就是所就算吃完了一个仓库的香蕉,并且一小时里还有剩余时间,它也不会跑去其他仓库吃。

    问我们在h小时内吃完所有仓库的所需最小的速度是多少,因为珂珂这个b想要慢慢地偷吃。

    首先题目给出条件:

     h是大于仓库数量的,所以我们是一定的得出答案的。

    如果把速度定成所有仓库里最多的香蕉数,那么吃完吃需要仓库数量的时间,也是至少要花的时间,因为你速度再提高也不会减少花费的时间。

    而速度最低定成1,那么吃完仓库数量的时间就是所有仓库里香蕉的数量总和。

    我们就把速度的范围定下来了,就是 [ 1 , 仓库里最多的香蕉数 ] ,确定范围之后,我们可以使用二分查找法来进一步缩小范围,最终确定答案。

    我们每次取范围的中间数当作速度,看看按照这个速度吃完的时间有没有超过h,如果没有超过,那么就说明我们还有可能可以再慢一些,那么我们收缩右范围来使得范围的中位数变小。如果超过了h,那就说明我们的速度偏慢了,得提高速度,那么就要收缩左范围来使得范围的中位数变大。

    最终我们就可以把范围缩小到答案。

    代码:

    1. class Solution {
    2. public:
    3. int eat(const vector<int>& piles,int time){ //如果以time的速度吃,需要多久
    4. int ans=0;
    5. for(int p:piles){
    6. //如果剩余数量不是time的整数倍,那么需要额外+1
    7. if(p%time!=0) ans++;
    8. ans+=p/time;
    9. }
    10. return ans;
    11. }
    12. int minEatingSpeed(vector<int>& piles, int h) {
    13. int l=1;int r=piles[0]; //左闭右闭
    14. for(int p:piles) r=max(r,p);
    15. int time;
    16. int res=r;
    17. while(l
    18. int temp=l+(r-l)/2;
    19. time=eat(piles,temp);
    20. if(time<=h){ //如果当前速度满足条件,那么缩小右边界看看能不能用更小的速度.
    21. res=temp;
    22. r=temp;
    23. }else{ //如果不满足条件,那么缩小左边界,提升速度.
    24. l=temp+1;
    25. }
    26. }
    27. return res;
    28. }
    29. };

  • 相关阅读:
    jmeter
    Python知识点17---包
    Mybatis 映射器中使用@InsertProvider,@UpdateProvider,@DeleteProvider,@SelectProvider
    JWT 使用入门(二)token有效期
    CUDA编程基础:了解malloc以及堆、栈的基本概念,malloc声明的优点
    【实操干货】做好这 16 项优化,你的 Linux 操作系统焕然一新
    Web系统常见安全漏洞介绍及解决方案-CSRF攻击
    SpringCloud和SpringBoot在调Feign传文件时的异常汇总及解决办法
    原来大厂都是这样监控Tomcat性能的,废话不多说,直接开干
    软件测试 -- 进阶 2 软件测试分析
  • 原文地址:https://blog.csdn.net/m0_63235356/article/details/132206091
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号