今日中等题:https://leetcode.cn/problems/koko-eating-bananas/
刚开始看题目的时候觉得很简单,因为题目给的几个样例中,h和piles的长度相等时,就是最简单的,速度等于最大堆香蕉根数就是答案。
仔细思考之后发现,其他情况没办法穷举,无奈看了题解,发现是使用二分法,夹逼出答案。
这里需要注意一个点,就是向上取整时,如果本身能整除时不需要+1。
贴代码吧,这题也没有什么其他花样,就看能否想到二分法了。
class Solution {
public int minEatingSpeed(int[] piles, int h) {
Arrays.sort(piles);
int len = piles.length;
// 最大速度是最大根数,最小速度是1,取中间值
int min = 1, max = piles[len - 1];
while (min < max) {
int mid = (min + max) / 2;
if (time(piles, mid) > h) {
min = mid + 1;
}
else {max = mid;}
}
return min;
}
// 向上取整算时间
public int time(int[] piles, int speed) {
int sum = 0;
for (int pile : piles) {
sum += (pile + speed - 1) / speed;
}
return sum;
}
}
网友评论