/* * 875. Koko Eating Bananas * Difficulty: Medium * https://leetcode.com/problems/koko-eating-bananas/ * * ────────────────────────────────────────────────── * * Koko loves to eat bananas. There are n piles of bananas, the i^th * pile has piles[i] bananas. The guards have gone and will come back in * h hours. * * Koko can decide her bananas-per-hour eating speed of k. Each hour, * she chooses some pile of bananas and eats k bananas from that pile. If * the pile has less than k bananas, she eats all of them instead and * will not eat any more bananas during this hour. * * Koko likes to eat slowly but still wants to finish eating all the * bananas before the guards return. * * Return the minimum integer k such that she can eat all the bananas * within h hours. * * * * Example 1: * * Input: piles = [3,6,7,11], h = 8 * Output: 4 * * Example 2: * * Input: piles = [30,11,23,4,20], h = 5 * Output: 30 * * Example 3: * * Input: piles = [30,11,23,4,20], h = 6 * Output: 23 * * * * Constraints: * * • 1 <= piles.length <= 10^4 * * • piles.length <= h <= 10^9 * * • 1 <= piles[i] <= 10^9 */ /** * @param {number[]} piles * @param {number} h * @return {number} */ var minEatingSpeed = function(piles, h) { // Function to determine if K works for the H function kWorks(k){ let hours = 0; for (let p of piles){ hours += Math.ceil(p/k) } return hours <= h; } // Setup Binary Search let l = 1; let r = Math.max(...piles); // Find the K value which works for H and consumes all bananas while (l < r){ const mid = Math.floor((l + r) / 2); if (kWorks(mid)){ r = mid; }else{ l = mid + 1; } } return l; };