Minimum Speed to Arrive on Time — BS on Train Speed
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