[python 刷题] 875 Koko Eating Bananas

[python 刷题] 875 Koko Eating Bananas

题目:

Koko loves to eat bananas. There are n piles of bananas, the ith pile has piles[i] bananas. The guards have gone and will come back in h hours.

Koko can decide her bananas-per-hour eating speed of k. Each hour, she chooses some pile of bananas and eats k bananas from that pile. If the pile has less than k bananas, she eats all of them instead and will not eat any more bananas during this hour.

Koko likes to eat slowly but still wants to finish eating all the bananas before the guards return.

Return the minimum integer k such that she can eat all the bananas within h hours.

这道题主要有几个限制:

  1. koko 想要吃完 n piles 个香蕉
  2. koko 吃香蕉的速度是匀速的
  3. 不管 koko 吃得多快,她吃完 1 pile 就不会继续吃了
  4. koko 希望吃得越慢越好
  5. koko 需要在 h 小时内吃完
  6. piles.length <= h,也就是说 koko 一定能吃完所有 pile 的香蕉

换言之,koko 每小时需要尽可能少吃香蕉,并且保证在 h 小时内吃完所有香蕉,这道题的暴力解为:

class Solution:def minEatingSpeed(self, piles: List[int], h: int) -> int:speed = 1def hour_needed_to_eat():total_hour_needed = 0for pile in piles:total_hour_needed += math.ceil(pile / speed)if total_hour_needed > h:return Falsereturn total_hour_needed <= hwhile True:if hour_needed_to_eat():return speedspeed += 1

也就是让 koko 从每小时 1 根香蕉开始吃起,一直吃到正好在 h 小时内可以吃完香蕉的速度就返回

尽管循环的条件是 while True,不过已经得知 piles.length <= h,所以香蕉的吃速上限为 max(piles),换言之,这道题可以理解成,在 [ 1 , 2 , 3 , . . . , m a x ( p i l e s ) ] [1, 2, 3, ..., max(piles)] [1,2,3,...,max(piles)] 这样一个有序数组内,找到一个特定的解,所以暴力解的空间复杂度为 O ( 1 ) O(1) O(1),时间复杂度为 O ( m a x ( p i l e s ) × n ) O(max(piles) \times n) O(max(piles)×n),其中 n n n 为数组的长度。

另外,看到 在一个有序数组中找到一个特定的解 这样的 pattern,大概是能够比较模糊的猜测出,这道题是一道 binary search,这道题的要求就是在 [ 1 , 2 , 3 , . . . , m a x ( p i l e s ) ] [1, 2, 3, ..., max(piles)] [1,2,3,...,max(piles)] 中找到一个最小的数字,使得 ∑ i = 1 m a x ( p i l e s ) m a t h . c e i l ( p i l e i ) \sum_{i=1}^{max(piles)} math.ceil(\frac{pile}{i}) i=1max(piles)math.ceil(ipile) 趋近于给定的 h h h

将暴力解的写法稍微改动一下,变成 binary search:

class Solution:def minEatingSpeed(self, piles: List[int], h: int) -> int:l, r = 1, max(piles)res = rdef hour_needed_to_eat(k):total_hour_needed = 0for pile in piles:total_hour_needed += math.ceil(pile / k)return total_hour_neededwhile l <= r:m = (l + r) // 2hours_needed = hour_needed_to_eat(m)if hours_needed <= h:r = m - 1res = melse:l = m + 1return res

因为使用了二分算法,这道题的时间复杂度为 O ( n × l o g ( m a x ( p i l e s ) ) ) O(n \times log(max(piles))) O(n×log(max(piles)))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/91241.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Yolov8的工业端面小目标计数检测(2):Gold-YOLO,遥遥领先,超越所有YOLO | 华为诺亚NeurIPS23

💡💡💡本文独家全网首发改进:提出了全新的信息聚集-分发(Gather-and-Distribute Mechanism)GD机制,Gold-YOLO,替换yolov8 head部分 实现暴力涨点 Gold-YOLO | 亲测在工业端面小目标计数涨点明显,原始mAP@0.5 0.936提升至0.945 layers parametersGFLOPs mAP50mAP…

数据库插入数据

数据库插入数据可以使用SQL语言完成&#xff0c;常用的语句是INSERT INTO。 例如&#xff0c;在一个名为“students”的表中&#xff0c;有三个字段&#xff08;id&#xff0c;name&#xff0c;age&#xff09;&#xff0c;需要插入一条新的数据&#xff0c;可以使用以下语句&a…

Windows 安装CMake

CMake 简介 CMake是一个开源的、跨平台的自动化构建系統&#xff0c;用來管理软件构建的过程。 其用途主要包括&#xff1a; 1. 跨平台编译&#xff1a;CMake支援Windows&#xff0c;Mac OS&#xff0c;Linux等多种操作系統&#xff0c;且支援多数主流编译器如GCC&#xff0…

智能合约漏洞,Dyna 事件分析

智能合约漏洞&#xff0c;Dyna 事件分析 1. 漏洞简介 https://twitter.com/BlockSecTeam/status/1628319536117153794 https://twitter.com/BeosinAlert/status/1628301635834486784 2. 相关地址或交易 攻击交易 1&#xff1a; https://bscscan.com/tx/0x7fa89d869fd1b89e…

【STL巨头】set、map、multiset、multimap的介绍及使用

set、map、multiset、multimap的介绍及使用 一、关联式容器二、键值对键值对概念定义 三、setset的介绍set的使用set的模板参数列表set的构造set的迭代器set的容量emptysize set的修改操作insertfind && erasecountlower_bound 和 upper_bound Multiset的用法 四、mapm…

inndy_echo

inndy_echo Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x8048000)32位&#xff0c;只开了NX int __cdecl __noreturn main(int argc, const char **argv, const char **envp) {char s; // [espCh…

Unity2023打包首包从78Mb到3.0Mb-震惊-我做对了什么

&#xff08;全程并没有使用AssetBundle , 历史原因&#xff0c;Resources目录还有不少资源残留&#xff09; 曾经的我在2019打包过最小包10m左右&#xff0c;后来发现到了Unity2020之后暴增到40m&#xff0c;又加上2023版本URP&#xff0c;1个Unity输出包可能至少55M 如下图…

华为智能高校出口安全解决方案(3)

本文承接&#xff1a; https://qiuhualin.blog.csdn.net/article/details/133267254?spm1001.2014.3001.5502 重点讲解华为智能高校出口安全解决方案的攻击防御&安全运维&日志审计的部署流程。 华为智能高校出口安全解决方案&#xff08;3&#xff09; 课程地址攻击防…

基于Vue+ELement实现增删改查案例与表单验证(附源码)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《ELement》。&#x1f3af;&#x1f3af; &#x1…

孤举者难起,众行者易趋,openGauss 5.1.0版本正式发布!

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

Java获取给定月份的前N个月份和前N个季度

描述&#xff1a; 在项目开发过程中&#xff0c;遇到这样一个需求&#xff0c;即&#xff1a;给定某一月份&#xff0c;得到该月份前面的几个月份以及前面的几个季度。例如&#xff1a;给定2023-09&#xff0c;获取该月份前面的前3个月&#xff0c;即2023-08、2023-07、2023-0…

数据结构学习系列之循环队列

队列的基本概念&#xff1a;队列&#xff08;Queue&#xff09;&#xff1a;一种先进先出&#xff08;FIFO&#xff09;的线性表&#xff1b;队尾&#xff08;rear&#xff09;&#xff1a;允许插入的一端&#xff1b;队头&#xff08;front&#xff09;&#xff1a;允许删除的…

基于微信小程的流浪动物领养小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

IDEA 使用

目录 Git.gitignore 不上传取消idea自动 add file to git本地已经有一个开发完成的项目&#xff0c;这个时候想要上传到仓库中 Git .gitignore 不上传 在项目根目录下创建 .gitignore 文件夹&#xff0c;并添加内容&#xff1a; .gitignore取消idea自动 add file to git 在…

Java中将字符串ArrayList转换为数组的四种方法

Java中将String的ArrayList转换为String数组&#xff1a; 如果运行&#xff1a; String[] result (String[]) INPUT_LIST.toArray(); 得到错误&#xff1a; java.lang.ClassCastException: class [Ljava.lang.Object; cannot be cast to class [Ljava.lang.String; 抛出了Cl…

layuiselect设置为不可下拉选取

$("#exam").siblings(".layui-form-select").find("dl").remove(); 或 layuiSelectDisable($("#exam")); // 设置selet元素不可下拉选择function layuiSelectDisable(selectElem) {try {var dlElem selectElem.siblings(".layu…

9.30作业

C语言基础考题&#xff08;40&#xff09; 选择题 20分每题2分 1、已知字母A的ASCII码为十进制数值65&#xff0c;且S为字符型&#xff0c;则执行语句SA6-3&#xff1b;后S中的值为 ( ) A.D B.68 C.不确定的值 D.C 2、若有定义语句&#xff1a;int a12;&#xff0c;则执…

后端大厂面试-15道题

1. 说说计算机存储结构 计算机存储结构通常包括这几个层次&#xff1a; 主存储器&#xff08;Main Memory&#xff09;&#xff1a;也称为内存&#xff08;RAM&#xff0c;Random Access Memory&#xff09;&#xff0c;主要用于存储当前正在执行的程序和数据。它是计算机中最…

通俗讲解深度学习轻量网络MobileNet-v1/v2/v3

MobileNet网络是由google团队在2017年提出的&#xff0c;专注于移动端或者嵌入式设备中的轻量级CNN网络。相比传统卷积神经网络&#xff0c;在准确率小幅降低的前提下大大减少模型参数与运算量。(相比VGG16准确率减少了0.9%&#xff0c;但模型参数只有VGG的1/32)。MobileNet网络…

时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测

时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测 目录 时序预测 | MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现POA-CNN-GRU鹈鹕算法优化卷积门控循环单元时间序…