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

华为OD面试手撕真题 - 爱吃香蕉的珂珂

题目描述

珂珂喜欢吃香蕉。这里有n堆香蕉,第i堆中有piles[i]根香蕉。警卫已经离开了,将在h小时后回来。

珂珂可以决定她吃香蕉的速度k(单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉k根。如果这堆香蕉少于k根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。

珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。

返回她可以在h小时内吃掉所有香蕉的最小速度kk为整数)。

示例1

输入:piles = [3,6,7,11], h = 8 输出:4

示例2

输入:piles = [30,11,23,4,20], h = 5 输出:30

示例3

输入:piles = [30,11,23,4,20], h = 6 输出:23

提示

  • 1 <= piles.length <= 104
  • piles.length <= h <= 109
  • 1 <= piles[i] <= 109

题解

力扣原题链接

思路:二分

  • 从题目来看,这道题肯定有解,所以不需要考虑h <= 香蕉堆数的情况

  • 接下来考虑H = 香蕉堆数量时, 结果肯定为max(香蕉堆香蕉的数量). 因为每个小时要处理一个香蕉堆,要保证能在一个小时内吃完一堆香蕉

  • 最后考虑H > 香蕉堆数量时,怎么确定k的值。采用二分进行确定,left = 1, right = max(所有香蕉堆香蕉数量),每次枚举mid = (right + left) / 2是否可以在指定时间内把所有香蕉堆上香蕉吃完。

    • 不能吃完,更新left = mid + 1
    • 能吃完,更新right = mid
  • 二分退出条件为left == right

  • 最终的left的值就是结果。

额外注意:所有香蕉堆中香蕉数量 可能超过int范围,需要使用long范围。

c++

class Solution { public: // 计算所需时间是否小于h bool check(vector<int>& piles, long k, int h) { int needHour = 0; int n = piles.size(); for (int i = 0; i < n; i++) { // 向上取整 needHour += ( piles[i] + k - 1) / k; } return needHour <= h; } int minEatingSpeed(vector<int>& piles, int h) { long left = 1, right = 0; int n = piles.size(); for (int i = 0; i < n; i++) { right += piles[i]; } // 二分 while (left < right) { long mid = (left + right) >> 1; if (check(piles, mid, h)) { right = mid; } else { left = mid + 1; } } return left; } };

JAVA

class Solution { // 计算在速度 k 下吃完是否不超过 h 小时 private boolean check(int[] piles, long k, int h) { long needHour = 0; for (int pile : piles) { // 向上取整 needHour += (pile + k - 1) / k; } return needHour <= h; } public int minEatingSpeed(int[] piles, int h) { long left = 1, right = 0; for (int pile : piles) { right += pile; } // 二分查找最小可行速度 while (left < right) { long mid = (left + right) >> 1; if (check(piles, mid, h)) { right = mid; } else { left = mid + 1; } } return (int) left; } }

Python

classSolution:# 计算在速度 k 下吃完是否不超过 h 小时defcheck(self,piles,k,h):needHour=0forpileinpiles:# 向上取整needHour+=(pile+k-1)//kreturnneedHour<=hdefminEatingSpeed(self,piles,h):left,right=1,sum(piles)# 二分查找whileleft<right:mid=(left+right)//2ifself.check(piles,mid,h):right=midelse:left=mid+1returnleft

JavaScript

/** * @param {number[]} piles * @param {number} h * @return {number} */varminEatingSpeed=function(piles,h){// 计算在速度 k 下吃完是否不超过 h 小时functioncheck(k){letneedHour=0;for(letpileofpiles){// 向上取整needHour+=Math.floor((pile+k-1)/k);}returnneedHour<=h;}letleft=1;letright=piles.reduce((a,b)=>a+b,0);// 二分查找while(left<right){letmid=Math.floor((left+right)/2);if(check(mid)){right=mid;}else{left=mid+1;}}returnleft;};

Go

funcminEatingSpeed(piles[]int,hint)int{// 检查在速度 k 下是否可以在 h 小时内吃完check:=func(kint)bool{needHour:=0for_,pile:=rangepiles{// 向上取整:(pile + k - 1) / kneedHour+=(pile+k-1)/k}returnneedHour<=h}left,right:=1,0for_,pile:=rangepiles{right+=pile}// 二分查找最小可行速度forleft<right{mid:=(left+right)>>1ifcheck(mid){right=mid}else{left=mid+1}}returnleft}
http://www.jsqmd.com/news/207018/

相关文章:

  • python基于django的小程序 零工市场服务系统_87366b99
  • 学Simulink--基础MPPT控制场景实例:基于Simulink的自适应模糊PI-MPPT控制仿真
  • 掌握数据可视化:从基础到实战的完整指南
  • Windows 下升级 R 语言至最新版
  • Pulse news stream Beta冲刺博客
  • AI原生应用领域推理能力的生成对抗网络实践
  • 2026年最新爆火AI论文工具:8款神器实测,开题报告免费写,30分钟搞定初稿!
  • 基于Springboot计算机网络教学系统【附源码+文档】
  • Flutter环境搭建与项目创建详解
  • UE5 C++(7-2):屏幕打印函数 GEngine->AddOnScreenDebugMessage(-1, 5, FColor::Red, TEXT(“OK“));及颜色静态成员变量FColor
  • 基于Springboot学生成绩量化管理系统【附源码+文档】
  • 多模态大模型前沿论文精析:8大开源框架助小白快速掌握AI核心技术
  • 揭秘AI应用架构师如何打造卓越的智能数字身份验证系统
  • 基于YOLOv10的大豆杂草检测系统(YOLOv10深度学习+YOLO数据集+UI界面+Python项目源码+模型)
  • 第七十篇-V100-32G+命令行代码+运行Flux.1-Schnell+Lora+文生图
  • 【珍藏必看】2026年AI产品经理转型全攻略:从零基础到4大岗位分类,5步快速入门!
  • 2026年AI大模型高薪路线:从入门到精通的学习宝典,大模型人才的薪资,彻底爆了
  • 从应用到框架:Deep Research与Deep Agent的关系深度解析
  • lambda的变量捕获机制
  • synchronized和ReentrantLock
  • [论文阅读]One Shot Dominance: Knowledge Poisoning Attack on Retrieval-Augmented Generation Systems
  • 掌握核心!如何成为优秀提示工程架构师
  • JVM-垃圾回收算法
  • PrimeTime roport timing语法
  • 2026必备!本科生毕业论文AI工具TOP8测评
  • 【Python】字符串类型之间比较大小
  • echarts实现3d饼图
  • 水库大坝安全监测:无人测量船的关键应用场景
  • 【计算机毕业设计案例】深度学习基于CNN卷积网络的蔬菜识别基于CNN卷积网络的蔬菜识别
  • python基于django的社区流浪动物领养管理系统_65kwrn28