剑指 Offer II 073. 狒狒吃香蕉
- k>=1 && k<=max,吃的再多,也没用,只会徒增k值
- 二分法,假设k值为mid,算出吃完所有香蕉需要花多长时间hour
- hour和h比较,如果比h大,说明吃慢了,就是假设的mid值小了,所以left = mid + 1
- 如果hour<=h 可能是刚刚好,于是我们记录下结果的值,那么继续从mid-1之前找最小值
var minEatingSpeed = function (piles, h) {
var max = Math.max(...piles)
var left = 1, right = max;
var result;
while (left <= right) {
var mid = (left + right) >> 1
var hour = getHours(mid);
if (hour > h) {
left = mid + 1;
}else {
result = mid;
right = mid - 1;
}
}
return result;
function getHours(k) {
var hour = 0;
for (var time of piles) {
hour += Math.floor(time / k);
if (time % k) hour++
}
return hour;
}
};