题目描述:
假设我们在一条水平数轴上,列表 stations 来表示各个加油站的位置,加油站分别在 stations[0], stations[1], …, stations[N-1] 的位置上,其中 N = stations.length。
现在我们希望增加 K 个新的加油站,使得相邻两个加油站的距离 D 尽可能的最小,请你返回 D 可能的最小值。
示例:
输入:stations = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], K = 9
输出:0.500000
注:
stations.length 是在范围 [10, 2000] 内的整数
stations[i] 是在范围 [0, 10^8] 内的整数
K 是在范围 [1, 10^6] 内的整数
在 10^-6 以内的正确值会被视为正确的答案
方法1:二分搜索
主要思路:
(1)直观的想,这些加油站之间的最大距离是可能的插入后的最大距离,最小的平均距离可能是将最大距离使用插入的K个加油站后的距离,则可以在这两个距离之间使用二分查找,找出一个距离,是插入 K 个加油站下的可以获得最小的距离;
(2)找出原来的加油站之间的最大距离 max_dist 作为二分搜索的右边界 right,在插入 K 个加油站下,来个加油站之间的可能的最小距离为 max_dist/(K+1),作为二分搜索的左边界;
(3)剩下的就是找满足要求的距离的左边界,既在插入 K 个加油站下,可获得的最小的距离;
(4)终止条件为左右边界范围小于 1e-6;
class Solution {
public:
//当前的距离下,能否通过插入 K 个加油站实现
bool can_work(vector<int>& stations,int K,