• 【LeetCode】1870. 准时到达的列车最小时速


    题目

    给你一个浮点数 hour ,表示你到达办公室可用的总通勤时间。要到达办公室,你必须按给定次序乘坐 n 趟列车。另给你一个长度为 n 的整数数组 dist ,其中 dist[i] 表示第 i 趟列车的行驶距离(单位是千米)。
    每趟列车均只能在整点发车,所以你可能需要在两趟列车之间等待一段时间。
    例如,第 1 趟列车需要 1.5 小时,那你必须再等待 0.5 小时,搭乘在第 2 小时发车的第 2 趟列车。
    返回能满足你准时到达办公室所要求全部列车的 最小正整数 时速(单位:千米每小时),如果无法准时到达,则返回 -1 。
    生成的测试用例保证答案不超过 107 ,且 hour 的 小数点后最多存在两位数字 。

    示例 1:

    输入:dist = [1,3,2], hour = 6
    输出:1
    解释:速度为 1 时:

    • 第 1 趟列车运行需要 1/1 = 1 小时。
    • 由于是在整数时间到达,可以立即换乘在第 1 小时发车的列车。第 2 趟列车运行需要 3/1 = 3 小时。
    • 由于是在整数时间到达,可以立即换乘在第 4 小时发车的列车。第 3 趟列车运行需要 2/1 = 2 小时。
    • 你将会恰好在第 6 小时到达。

    示例 2:

    输入:dist = [1,3,2], hour = 2.7
    输出:3
    解释:速度为 3 时:

    • 第 1 趟列车运行需要 1/3 = 0.33333 小时。
    • 由于不是在整数时间到达,故需要等待至第 1 小时才能搭乘列车。第 2 趟列车运行需要 3/3 = 1 小时。
    • 由于是在整数时间到达,可以立即换乘在第 2 小时发车的列车。第 3 趟列车运行需要 2/3 = 0.66667 小时。
    • 你将会在第 2.66667 小时到达。

    示例 3:

    输入:dist = [1,3,2], hour = 1.9
    输出:-1
    解释:不可能准时到达,因为第 3 趟列车最早是在第 2 小时发车。

    提示:

    n == dist.length
    1 <= n <= 105
    1 <= dist[i] <= 105
    1 <= hour <= 109
    hours 中,小数点后最多存在两位数字

    题解

    二分法
    左边界为1,有边界为10的7次方加一
    对于每一个mid,遍历数组求时间
    要注意:最后一趟车直接算行驶时间就行,不需要再等车了

    class Solution {
    public:
        int minSpeedOnTime(vector<int>& dist, double hour) {
            int len = dist.size();
            if(hour < len-1)
                return -1;
    
            int left = 1;
            int right = 1e+7 + 1;
            //int right = *max_element(dist.begin(),dist.end())*100;
            int res = -1;
            
            while(left<=right)
            {
                int mid = left + ((right-left)>>1);
                double cnt = 0;
                for(int i=0;i<len-1;i++)
                {
                    cnt += dist[i]/mid + (dist[i]%mid!=0);
                }
                cnt += (double)dist[len-1]/mid;
                    
                //cout<"<
    
                if(cnt <= hour)
                {
                    right = mid-1;
                    res = mid;
                }
                else
                {
                    left = mid+1;
                }
            }
            return res;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
  • 相关阅读:
    mysql 增量备份与恢复使用详解
    2022年最新阿里巴巴70道高级面试题,四面斩获阿里offer,直接定级为P7
    使用go pprof进行golang程序内存分析
    数据结构--排序
    SIT测试和UAT测试区别
    Hive 安装配置
    【前端面试题】01—42道常见的HTML5面试题
    Electron是什么以及可以做什么
    cesium 实战记录(三)获取鼠标位置总结
    Linux 进程信号
  • 原文地址:https://blog.csdn.net/qq_45972928/article/details/126242451