zoukankan      html  css  js  c++  java
  • LeetCode

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

    Now, we add K more 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.length will be an integer in range [10, 2000].
    2. stations[i] will be an integer in range [0, 10^8].
    3. K will be an integer in range [1, 10^6].
    4. Answers within 10^-6 of the true value will be accepted as correct.

    贪心肯定不对,参考discuss,假设一个结果,然后对结果进行二分逼近。

    public double minmaxGasDist(int[] stations, int K) {
            int LEN = stations.length;
            double left = 0, right = stations[LEN - 1] - stations[0], mid = 0;
    
            while (right >= left + 0.000001) {
                mid = right - (right - left) / 2;
                int cnt = 0;
                for (int i = 0; i < LEN - 1; i++) {
                    cnt += Math.ceil((stations[i + 1] - stations[i]) / mid) - 1; //重点理解代码,d_i / (cnt_i + 1) <= mid
                }
                if (cnt > K) {
                    left = mid;
                } else {
                    right = mid;
                }
            }
            return mid;
        }
  • 相关阅读:
    python ratelimit使用
    团队怎样去做技术规划
    分词语义提取工具
    今日头条推荐系统
    要选择做有价值的事情
    总结与规划
    性能使用到极限
    流量运营
    Stanford CoreNLP使用需要注意的一点
    七年总结
  • 原文地址:https://www.cnblogs.com/wxisme/p/8651963.html
Copyright © 2011-2022 走看看