875. 爱吃香蕉的珂珂
思路分析
我们要找的是速度。因为题目限制了珂珂一个小时之内只能选择一堆香蕉吃,因此速度的最小值肯定需要大于等于 1,同时也要小于等于这几堆香蕉中,数量最多的那一堆。
还是因为珂珂一个小时之内只能选择一堆香蕉吃,因此:每堆香蕉吃完的耗时
= 这堆香蕉的数量 / 珂珂一小时吃香蕉的数量
。根据题意,这里的 / 在 不能整除
的时候,需要 向上取整
。
代码实现
class Solution {
public int minEatingSpeed(int[] piles, int H) {
int maxVal = 1;
for (int pile : piles) {
maxVal = Math.max(maxVal,pile);
}
int left = 1,right = maxVal;
while (left <= right) {
int mid = left + (right - left) / 2;
if (calculateTime(piles,mid) > H) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return left;
}
private int calculateTime(int[] piles, int speed) {
int time = 0;
for (int pile : piles) {
// 向上取整可以这么写
time += (pile + speed - 1) / speed;
}
return time;
}
}