Minimum Speed to Arrive on Time

MediumArrayBinary Search

Solution

export function minSpeedOnTime(dist: number[], hour: number): number {
  const timeRequired = (speed: number) => {
    return dist.reduce((t, d, i) => {
      if (i === dist.length - 1) {
        return t + d / speed;
      }
      return t + Math.ceil(d / speed);
    }, 0);
  };
 
  let left = 0;
  let right = 10 ** 7;
  let minSpeed = -1;
 
  while (left <= right) {
    const mid = Math.floor((left + right) / 2);
    if (timeRequired(mid) <= hour) {
      minSpeed = mid;
      right = mid - 1;
    } else {
      left = mid + 1;
    }
  }
  return minSpeed;
}