Maximum Running Time of N Computers

HardArrayBinary SearchGreedySorting

Solution

export function maxRunTime(n: number, batteries: number[]): number {
  const batteryAverage = Math.floor(batteries.reduce((acc, battery) => acc + battery, 0) / n);
  let [left, right] = [1, batteryAverage];
 
  while (left < right) {
    const target = right - Math.floor((right - left) / 2);
 
    const extraBattery = batteries.reduce((prev, battery) => prev + Math.min(battery, target), 0);
    if (target <= Math.floor(extraBattery / n)) {
      left = target;
    } else {
      right = target - 1;
    }
  }
  return left;
}