剑指 Offer II 073. 狒狒吃香蕉

281 阅读1分钟

剑指 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) {
    //  k>=1 && k<=max
    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; // <=h 肯定是符合的,但是不一定是最合理的数据,可以先存下来
            right = mid - 1; // 继续从 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;
    }
};