这题是二分法的题
首先找到自变量,也就是吃香蕉的速度K,作为x
吃香蕉所花的时间H即为y
K和H之间的具体运算关系则由f()函数来解释
x,y的关系图如下所示
所以要求最小速度也就是找到图中的K所在的最左边位置
故使用二分搜索框架中查找最左边的框架即可
class Solution {
public int minEatingSpeed(int[] piles, int h) {
int left = 1;
int right = 1000000000+1;
while(left<right){
int mid = left+(right-left)/2;
if(f(piles,mid)<h){
right = mid;
}else if(f(piles,mid)>h){
left = mid+1;
}else if(f(piles,mid)==h){
right = mid;
}
}
return right;
}
public int f(int[] piles, int k){
int hours = 0;
for(int i = 0;i<piles.length;i++){
hours+=piles[i]/k;
if(piles[i]%k!=0){
hours++;
}
}
return hours;
}
}