Koko Eating Bananas

MediumArrayBinary Search

Solution

export function minEatingSpeed(piles: number[], h: number): number {
  const maxPile = piles.reduce((prev, curr) => Math.max(prev, curr), Number.MIN_SAFE_INTEGER);
 
  const isFeasible = (speed: number) =>
    piles.reduce((prev, pile) => prev + Math.ceil(pile / speed), 0) > h;
 
  let [start, end] = [1, maxPile];
  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    if (isFeasible(mid)) {
      start = mid + 1;
    } else {
      end = mid;
    }
  }
  return start;
}