875. 爱吃香蕉的珂珂(Java、二分搜索)

这题是二分法的题
首先找到自变量,也就是吃香蕉的速度K,作为x
吃香蕉所花的时间H即为y
K和H之间的具体运算关系则由f()函数来解释
x,y的关系图如下所示
875. 爱吃香蕉的珂珂(Java、二分搜索)_第1张图片
所以要求最小速度也就是找到图中的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;
    }
}

你可能感兴趣的:(算法,数据结构,算法,java,链表)