理解
题目要求koko在H小时内吃完piles[]堆香蕉的最小速度;
给定的限制条件是1 <= piles[i] <= 10^9,即可能的最小速度是1,最大速度是1e9;
思路
看完上面的理解,应该可以立马得出二分的左右值,即左值为1,右值为1e9;
重点
考察二分法的运用;
在代码中,一开始我计算了左右值,需要做一次遍历,相对直接从限制条件给出左右值,耗费了一点时间;
代码
class Solution {
public:
int minEatingSpeed(vector<int>& piles, int H) {
// int minspeed = 1;
// int maxspeed = 0;
// for(int i=0; i<piles.size(); i++){
// maxspeed = max(maxspeed, piles[i]);
// }
// int left = minspeed;
// int right = maxspeed;
int left = 1;
int right = 1e9;
while(left < right){
int mid = (left + right)/2;
int cnt = 0;
for(int i=0; i<piles.size(); i++){
cnt += piles[i]/mid;
if(piles[i]%mid)
cnt++;
}
if(cnt > H){
left = mid + 1;
}else{
right = mid;
}
}
return left;
}
};