774 Minimize Max Distance to Gas Station

1. Question

On a horizontal number line, we have gas stations at positionsstations[0], stations[1], ..., stations[N-1], whereN = stations.length.

Now, we addKmore gas stations so that D, the maximum distance between adjacent gas stations, is minimized.

Return the smallest possible value of D.

Example:

Input: stations = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], K = 9

Output: 0.500000

Note:

  1. stations.lengthwill be an integer in range[10, 2000].

  2. stations[i]will be an integer in range[0, 10^8].

  3. Kwill be an integer in range[1, 10^6].

  4. Answers within10^-6of the true value will be accepted as correct.

2. Implementation

(1) Binary Search

思路: 题目要求要在stations数组中放入最多K个加油站,使stations之间的最大距离最小。这是一道根据函数判断二分方向的二分法题,这本质上是通过二分法找解的右边界, 我们要找到一个最小的distance,使得 K * distance >= 原来站之间的距离和。

由于stationss[i]的范围在0和10^8之间,那么将start初始为0, end初始为10^8,然后按照这个距离二分找出满足条件的距离。而isValid()就是判断二分方向的函数,其核心就是根据我们二分得到的candidate mid这个距离,我们计算stations之间按照这个距离评分的话我们需要多少个加油站,如果需要的加油站count > K,说明mid这个距离太小,所以start = mid, 如果count <= K,说明mid是个可能的解,将end = mid。

3. Time & Space Complexity

Binary Search: 时间复杂度O(nlogm), n为stations的个数,M是原来stations之间的距离和。 空间复杂度O(1)

Last updated

Was this helpful?