解题思路
经典二分法题目,以以每堆最多香蕉作为速度上限,1作为速度下限,通过二分法查找刚好快要到时间的速度,每次都统计当前速度下所用时长,如果不到时间,说明吃快了,high=mid;超时了,说明吃慢了,low = mid + 1,最后返回high即可,代码如下:
代码
class Solution {
public:
int minEatingSpeed(vector<int>& piles, int h) {
// 以每堆最多香蕉作为最大值
int high = *max_element(piles.begin(), piles.end());
// 1作为最小值
int low = 1;
while(low < high) {
int count = 0;
int mid = (high - low) / 2 + low;
for(auto& pile : piles) {
count += pile % mid == 0 ? pile / mid : (pile / mid) + 1;
}
// 如果不到时间,说明吃快了
if(count <= h) {
high = mid;
} else {// 超时了,吃慢了
low = mid + 1;
}
}
return high;
}
};