1. 题目链接
875. 爱吃香蕉的珂珂
2. 题目描述
3. 解题方法
简单的用我自己的理解来解释一下这道题的意思。
所以也就是说找到一个速度k,看还有没有比k更小的速度能吃完数组中的香蕉,如果有则继续寻找,没有则是k这个速度。就好比上面的解释说明,其实k = 5这个速度也是可以的,但是题目说明要找吃掉所有香蕉的最小速度。
此时就是从1 ~ 1e9这些速度中找吃完所有香蕉的最小速度,也就是用二分查找来解决。
4. 代码
class Solution {
public:
int minEatingSpeed(vector<int>& piles, int h)
{
// 从1 ~ 1e9的来找速度
int l = 1, r = (int)1e9;
while(l < r)
{
// 防止溢出问题
int mid = (r - l) / 2 + l;
// 检查速度是否符合题意
if(check(mid, piles, h)) r = mid;
else l = mid + 1;
}
return r;
}
bool check(int mid, vector<int>& piles, int h)
{
int cnt = 0;
for(auto e : piles)
{
cnt += e / mid;
if(e % mid != 0) cnt ++;
}
return cnt <= h;
}
};