力扣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;
      }
  };
相关推荐
杜杜的man9 分钟前
【go从零单排】迭代器(Iterators)
开发语言·算法·golang
2401_8574396923 分钟前
SpringBoot框架在资产管理中的应用
java·spring boot·后端
怀旧66624 分钟前
spring boot 项目配置https服务
java·spring boot·后端·学习·个人开发·1024程序员节
李老头探索26 分钟前
Java面试之Java中实现多线程有几种方法
java·开发语言·面试
小沈熬夜秃头中୧⍤⃝26 分钟前
【贪心算法】No.1---贪心算法(1)
算法·贪心算法
芒果披萨31 分钟前
Filter和Listener
java·filter
qq_49244844636 分钟前
Java实现App自动化(Appium Demo)
java
阿华的代码王国44 分钟前
【SpringMVC】——Cookie和Session机制
java·后端·spring·cookie·session·会话
木向1 小时前
leetcode92:反转链表||
数据结构·c++·算法·leetcode·链表
阿阿越1 小时前
算法每日练 -- 双指针篇(持续更新中)
数据结构·c++·算法