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;}
};