力扣2187.完成旅途的最少时间

力扣2187.完成旅途的最少时间

朴素做法

  • 二分答案

cpp 复制代码
  class Solution {
      long long check(vector<int> time,long long k)
      {
          long long res=0;
          for(auto t:time)
              res += (long long)k/t;
          return res;
      }
  public:
      long long minimumTime(vector<int>& time, int totalTrips) {
          int n = time.size();
          sort(time.begin(),time.end());
          long long l=time[0]  - 1,r=(long long)totalTrips*time[0];
          while(l<r)
          {
              long long mid = l + r >> 1;
              if(check(time,mid) < (long long)totalTrips) l = mid + 1;
              else r = mid;
          }
          return l;
      }
  };

优化

  • 内联函数

  • 库函数min

cpp 复制代码
  class Solution {
  public:
      long long minimumTime(vector<int>& time, int totalTrips) {
          //内联函数 比外部函数快一倍
          auto check = [&](long long x) -> bool
          {
              long long res=0;
              for(int t : time)
              {
                  res += x/t;
                  if(res >= totalTrips) return true;
              }
              return false;
          };
          //求最小值
          int min_t = ranges::min(time);
          long long l=min_t,r=(long long)totalTrips*min_t;
          while(l<r)
          {
              long long mid = l + r >> 1;
              //说明当前mid时res >= total
              if(check(mid)) r = mid;
              else l = mid + 1;
          }
          return r;
      }
  };
相关推荐
alonewolf_994 分钟前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子5 分钟前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji341612 分钟前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
mit6.82417 分钟前
位运算|拆分贪心
算法
ghie909036 分钟前
基于MATLAB的TLBO算法优化实现与改进
开发语言·算法·matlab
恋爱绝缘体136 分钟前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wuk99836 分钟前
VSC优化算法MATLAB实现
开发语言·算法·matlab
wszy18091 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
Z1Jxxx1 小时前
加密算法加密算法
开发语言·c++·算法
wszy18091 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos