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

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

码农世界 2024-06-18 后端 95 次浏览 0个评论

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

朴素做法

  • 二分答案

  •   class Solution {
          long long check(vector time,long long k)
          {
              long long res=0;
              for(auto t:time)
                  res += (long long)k/t;
              return res;
          }
      public:
          long long minimumTime(vector& 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
                  long long mid = l + r >> 1;
                  if(check(time,mid) < (long long)totalTrips) l = mid + 1;
                  else r = mid;
              }
              return l;
          }
      };
    

    优化

    • 内联函数

    • 库函数min

    •   class Solution {
        public:
            long long minimumTime(vector& 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
                    long long mid = l + r >> 1;
                    //说明当前mid时res >= total
                    if(check(mid)) r = mid;
                    else l = mid + 1;
                }
                return r;
            }
        };
      

转载请注明来自码农世界,本文标题:《力扣2187.完成旅途的最少时间》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,95人围观)参与讨论

还没有评论,来说两句吧...

Top