//每一堆的数量和吃香蕉的速度具有单调性质。
//数组 + 二分查找:因为每个小时只吃一堆香蕉。
//下界:1只,上界:最大的一堆的数量
//指定的范围内求最大或者最小值就得用二分查找法来实现:
class Solution {
public int minEatingSpeed(int[] piles, int h) {
int low = 1;
int high =0;
for(int pile:piles){
high = Math.max(high,pile);
}
int k = high;
while(low<high){//二分查找的上下的界限需要根据题目进行定义。
int speed = low+(high-low)/2;
long time = getTime(piles,speed);
if(time<=h){
k=speed;
high=speed;//将上限进行更新。
}else{
low = speed+1;//不符合的话将下限更新。
}
}
return k;
}
long getTime(int[] piles,int speed){//指定的数量需要消耗的时间:
long time = 0;
for(int pile : piles){
int currentTime= (pile + speed - 1)/speed;
time += currentTime;
}
return time;
}
}