Minimum Time to Complete Trips

MediumArrayBinary Search

Solution

export function minimumTime(time: number[], totalTrips: number): number {
  const getCurrentTotalTrips = (t: number) => {
    return time.reduce((prev, curr) => prev + Math.floor(t / curr), 0);
  };
 
  const minTime = time.reduce((prev, curr) => Math.min(prev, curr), Number.MAX_SAFE_INTEGER);
 
  let [start, end] = [0, totalTrips * minTime];
  while (start < end) {
    const mid = Math.floor((start + end) / 2);
    const currentTrips = getCurrentTotalTrips(mid);
    if (currentTrips < totalTrips) {
      start = mid + 1;
    } else {
      end = mid;
    }
  }
  return end;
}