• 1870. 准时到达的列车最小时速-二分法


    1870. 准时到达的列车最小时速

    给你一个浮点数 hour ,表示你到达办公室可用的总通勤时间。要到达办公室,你必须按给定次序乘坐 n 趟列车。另给你一个长度为 n 的整数数组 dist ,其中 dist[i] 表示第 i 趟列车的行驶距离(单位是千米)。

    每趟列车均只能在整点发车,所以你可能需要在两趟列车之间等待一段时间。

    例如,第 1 趟列车需要 1.5 小时,那你必须再等待 0.5 小时,搭乘在第 2 小时发车的第 2 趟列车。
    
    • 1

    返回能满足你准时到达办公室所要求全部列车的 最小正整数 时速(单位:千米每小时),如果无法准时到达,则返回 -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 小时发车。

    这题应该采用二分法,解题代码如下:

    
    
    bool f(int speed,int *dist,int distSize,double hour){
         int hour_limit=0;
        int i=0;
        double now_time=0;
        for(i=0;i<distSize;i++){
             // printf("--%f ",now_time);
            now_time=dist[i]/1.0/speed+now_time;
           //    printf("%f ",now_time);
            if(now_time>hour){
                return false;
            }
            else{
                now_time=ceil(now_time);
       
            }
    
        }
        return true;
    
    
    }
    
    int minSpeedOnTime(int* dist, int distSize, double hour){
    
        int i;
     //   printf("%d %d",distSize,hour);
        if(hour<=distSize-1){
            return -1;
        }
    
        i=1;
        int low=1,high=1000000;
       
        int p;
        while(low<=high){
            p=(low+high)/2;
            if(f(p,dist,distSize,hour)){
                high=p-1;
           
            }
          else{
                low=p+1;
          }
        }
        if(f(p,dist,distSize,hour)){
            return p;
        }
        else{
            return p+1;
        }
        return -1;
      
    
    }
    
    • 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
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
  • 相关阅读:
    测试工程师面试之设计测试用例
    cuda和cudnn和tensorrt的理解
    web前端期末大作业【 大学生抗疫感动专题网页设计】HTML+CSS
    MaixII-Dock(v831)学习笔记——初识v831
    yolov5量化注意事项
    C++【智能指针】
    window 安装多个版本的nodejs值版本控制工具nvm
    新恒盛110kV变电站智能辅助系统综合监控平台+道巡检机器人
    【PAT甲级 - C++题解】1104 Sum of Number Segments
    H01-基于深度学习的物体检测-概述
  • 原文地址:https://blog.csdn.net/weixin_43327597/article/details/125514219