Minimum Speed to Arrive on Time — BS on Train Speed

Sanjeev SharmaSanjeev Sharma
1 min read

Advertisement

Problem · Minimum Speed to Arrive on Time

Difficulty: Medium · Pattern: BS on Answer

n train rides, must arrive by time (float). All rides except the last must be ceiling-divided.

Solutions

# Python
import math
def minSpeedOnTime(dist, hour):
    if len(dist) > math.ceil(hour): return -1
    def feasible(speed):
        t = 0
        for i, d in enumerate(dist[:-1]):
            t += math.ceil(d/speed)
        t += dist[-1]/speed
        return t <= hour

    lo, hi = 1, 10**7
    while lo < hi:
        mid = (lo+hi)//2
        if feasible(mid): hi = mid
        else: lo = mid+1
    return lo
// Java
public int minSpeedOnTime(int[] dist, double hour) {
    int n=dist.length;
    if (n > (int)Math.ceil(hour)) return -1;
    int lo=1, hi=(int)1e7;
    while (lo<hi) {
        int mid=lo+(hi-lo)/2; double t=0;
        for (int i=0;i<n-1;i++) t+=Math.ceil((double)dist[i]/mid);
        t+=(double)dist[n-1]/mid;
        if (t<=hour) hi=mid; else lo=mid+1;
    }
    return lo;
}

Complexity

  • Time: O(n log(max_speed))
  • Space: O(1)

Advertisement

Sanjeev Sharma

Written by

Sanjeev Sharma

Full Stack Engineer · E-mopro