【6010.完成旅途的最少时间】力扣周赛第282场,使用二分法

6010.完成旅途的最少时间

image

image

最需要注意的地方!

这个范围太大了,int根本解决不了,因此里面变量的声明也要用long
image

解题思路

居然是二分法..(我自己根本想不到,早上周赛做的时候一直超时...唉!)
让我们求出完成 至少 totalTrips 趟旅途需要花费的 最少 时间,是一个求下界的问题。既然暴力会超时,那就只能用别的方法。
这里二分法是用于解空间。l是解空间的下界,r是解空间上界。
先将这个车辆行驶时间进行排序
解空间的上界 r 通过计算 time[0] * totalTrips得到 ,即得到 旅途花费的 最多 时间,因为当有其他车辆在花费时间最多之内也能跑完则会使得车次跑完旅途的次数+1。

自己遇到3-4个样例没过的原因

  1. long r = 1L * time[0] * totalTrips;//只用第一个车
  • 注意这里先乘1L。有一次是放在后面乘的结果有样例不过
  1. //计算mid的情况下能完成多少趟
    long temp = 0;
    一定要用long声明,我一开始用的int,心想着totalTrips都是int,temp肯定也可以用,后来发现有一个样例过不了...

Java实现

class Solution {
    public long minimumTime(int[] time, int totalTrips) {
        //居然是二分法
        //在解空间中进行二分法
        Arrays.sort(time);//先从小到大排序
        long l = 0;
        long r = 1L * time[0] * totalTrips;//只用第一个车
        while(l<=r){
            //下界的问题,求满足的最早的值,返回left
            long mid = l + (r - l)/2;
            //计算mid的情况下能完成多少趟
            long temp = 0;
            for(int i = 0; i < time.length; i++){
                if(time[i] > mid)break;
                temp += mid/time[i];
            }
            if(temp >= totalTrips){
                r = mid - 1;
            }else{
                l = mid + 1;
            }
        }
        return l;

    }
}

二分法问题推荐看力扣上的这篇文章

一个模板通杀所有「二分查找」问题,对比「闭区间」和「左开右闭」两种写法,看不懂算我输!

个人感觉他把问题划分为求下届和求上界,挺清晰的。

posted @   tootooquan  阅读(55)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示