Minimize Max Distance to Gas Station

hard binary-search search math

Problem

Given sorted station positions and K additional stations to place, minimize the maximum distance between adjacent stations.

Inputstations=[1,2,3,4,5,6,7,8,9,10], K=9
Output0.500000
With nine extra stations placed at midpoints, the max gap becomes 0.5.

def minmaxGasDist(stations, K):
    lo, hi = 0.0, stations[-1] - stations[0]
    for _ in range(60):
        mid = (lo + hi) / 2
        need = 0
        for i in range(1, len(stations)):
            need += int((stations[i] - stations[i-1]) / mid)
        if need > K: lo = mid
        else: hi = mid
    return hi
function minmaxGasDist(stations, K) {
  let lo = 0, hi = stations[stations.length-1] - stations[0];
  for (let it = 0; it < 60; it++) {
    const mid = (lo + hi) / 2;
    let need = 0;
    for (let i = 1; i < stations.length; i++)
      need += Math.floor((stations[i] - stations[i-1]) / mid);
    if (need > K) lo = mid; else hi = mid;
  }
  return hi;
}
double minmaxGasDist(int[] stations, int K) {
    double lo = 0, hi = stations[stations.length-1] - stations[0];
    for (int it = 0; it < 60; it++) {
        double mid = (lo + hi) / 2;
        int need = 0;
        for (int i = 1; i < stations.length; i++)
            need += (int)((stations[i] - stations[i-1]) / mid);
        if (need > K) lo = mid; else hi = mid;
    }
    return hi;
}
double minmaxGasDist(vector<int>& stations, int K) {
    double lo = 0, hi = stations.back() - stations.front();
    for (int it = 0; it < 60; it++) {
        double mid = (lo + hi) / 2;
        int need = 0;
        for (int i = 1; i < (int)stations.size(); i++)
            need += (int)((stations[i] - stations[i-1]) / mid);
        if (need > K) lo = mid; else hi = mid;
    }
    return hi;
}
Time: O(n log(1/eps)) Space: O(1)