网站正在建设 mp4网站建设兼职劳务协议
2026/4/17 23:59:27 网站建设 项目流程
网站正在建设 mp4,网站建设兼职劳务协议,保定商城网站建设,深圳网站开发服务题目描述 珂珂喜欢吃香蕉。这里有 n 堆香蕉#xff0c;第 i 堆中有 piles[i] 根香蕉。警卫已经离开了#xff0c;将在 h 小时后回来。 珂珂可以决定她吃香蕉的速度 k #xff08;单位#xff1a;根/小时#xff09;。每个小时#xff0c;她将会选择一堆香蕉#xff0c…题目描述珂珂喜欢吃香蕉。这里有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 104piles.length h 1091 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范围。cclass Solution { public: // 计算所需时间是否小于h bool check(vectorint 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(vectorint 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; } };JAVAclass 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; } }PythonclassSolution:# 计算在速度 k 下吃完是否不超过 h 小时defcheck(self,piles,k,h):needHour0forpileinpiles:# 向上取整needHour(pilek-1)//kreturnneedHourhdefminEatingSpeed(self,piles,h):left,right1,sum(piles)# 二分查找whileleftright:mid(leftright)//2ifself.check(piles,mid,h):rightmidelse:leftmid1returnleftJavaScript/** * param {number[]} piles * param {number} h * return {number} */varminEatingSpeedfunction(piles,h){// 计算在速度 k 下吃完是否不超过 h 小时functioncheck(k){letneedHour0;for(letpileofpiles){// 向上取整needHourMath.floor((pilek-1)/k);}returnneedHourh;}letleft1;letrightpiles.reduce((a,b)ab,0);// 二分查找while(leftright){letmidMath.floor((leftright)/2);if(check(mid)){rightmid;}else{leftmid1;}}returnleft;};GofuncminEatingSpeed(piles[]int,hint)int{// 检查在速度 k 下是否可以在 h 小时内吃完check:func(kint)bool{needHour:0for_,pile:rangepiles{// 向上取整(pile k - 1) / kneedHour(pilek-1)/k}returnneedHourh}left,right:1,0for_,pile:rangepiles{rightpile}// 二分查找最小可行速度forleftright{mid:(leftright)1ifcheck(mid){rightmid}else{leftmid1}}returnleft}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询