leetcode 2187. Minimum Time to Complete Trips(完成行程的最短时间)

news2025/7/23 16:35:21

(Medium)
在这里插入图片描述
time数组里面是每个bus完成一次路程需要的时间,假设时间单位是h, 比如time = [1,2,3]就表示第1辆bus跑完路程需要1h,第2辆需要2h,第3辆需要3h.
那么把所有bus都考虑进来,总共要跑完totalTrips次路程,问至少需要多少时间。
假设bus之间是独立的,不需要中间休息,可以连续运行。

思路:

先理解一下想要干什么。

比如Example 1, time = [1,2,3], totalTrips=5,
就是说3辆bus都一起跑,总共跑完5次需要最短的时间。

假设时间单位是h吧,
第1h,第1辆bus跑完1次,第2辆0次,第3辆0次,所以是[1,0,0]
第2h,第1辆2次,第2辆1次,第3辆还是0次,所以是[2,1,0]
第3h,第1辆3次,第2辆1次,第3辆1次,是[3,1,1], 总共完成了5次trip, 所以需要的时间是3h。

现在来推广,假设需要的时间是 T(h),
那么总共的次数 n = T/time1 + T/time2 + T/time3,
如果 n == totalTrips, 那么T就是所需的时间。

那如何找最小的T呢,就是不断调小T,让它仍然能满足 n == totalTrips,

为什么可以调小T但仍然能满足呢
假如time = [2,2,3], totalTrips = 5,
如果T=5,n=5/2+ 5/2 + 5/3 = 2+2+1 = 5,
调小T=4, 是不是仍然满足n = 4/2 + 4/2 + 4/3 = 2+2+1 = 5.
再调T=3, n = 3/2 + 3/2 + 3/3 = 3不满足,所以最小时间是4.

那么再考虑一下所需的最长时间(右边界)是多少呢?
就取最小的time, 让耗时最小的bus跑totalTrips次,那么耗时=min time ✖ totalTrips.

所以有没有熟悉的感觉,知道左边界是min time(最短可能的时间),右边界是min time ✖ totalTrips,
在这之间调整T,让 n == totalTrips.
用到binary search.

和以前binary search不同的是,当 n == totalTrips时,不要立刻返回mid,
因为上面也证实了,T还可以进一步调小,直到不能满足为止。

    public long minimumTime(int[] time, int totalTrips) {
        int n = time.length;
        long maxTime = 0;
        long minTime = Integer.MAX_VALUE;
        
        for(int curTime : time) {
            minTime = Math.min(minTime, curTime);
            maxTime = Math.max(maxTime, curTime);
        }
        if(totalTrips == 1) return minTime;
        long left = minTime;
        long right = totalTrips * minTime;

        while(left <= right) {
            long mid = left + (right - left) / 2;
            long cnt = 0;
            
            for(int curTime : time) {
                cnt += mid / curTime;
                if(cnt > totalTrips) break;
            }
            
            if(cnt >= totalTrips) right = mid - 1;
            else left = mid + 1;
        }
        return left;
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394912.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据库之基本功:Where 中常用运算符

1. 运算符及优先级 ( )优先级最高 SQL> show user; USER is "SCOTT" SQL> select ename, job, sal, comm from emp where jobSALESMAN OR jobPRESIDENT and sal> 1500;ENAME JOB SAL COMM …

Pyspark基础入门5_RDD的持久化方法

Pyspark 注&#xff1a;大家觉得博客好的话&#xff0c;别忘了点赞收藏呀&#xff0c;本人每周都会更新关于人工智能和大数据相关的内容&#xff0c;内容多为原创&#xff0c;Python Java Scala SQL 代码&#xff0c;CV NLP 推荐系统等&#xff0c;Spark Flink Kafka Hbase Hi…

回收站清空恢复,4种方法任你选!

案例&#xff1a;不小心清空了回收站怎么恢复&#xff1f; “回收站刚刚清空的文件怎么恢复呀&#xff1f;辛苦收集的材料不小心删除了&#xff0c;请大神来帮我下。” 回收站是我们电脑上的一个非常实用的功能&#xff0c;可以让我们暂时存放不需要的文件或者是可以被删除的…

启动u盘还原成普通u盘(Windows Diskpart)

使用windows系统的diskpart 命令解决系统盘恢复成普通U盘的问题&#xff1a;1. 按Windows R键打开运行窗口。在搜索框中输入“ Diskpart ”&#xff0c;然后按 Enter 键。2. 现在输入“ list disk ”并回车。3. 然后输入“ select disk X ”&#xff08;将 X 替换为可启动U盘的…

围棋高手郭广昌的“假眼”棋局

&#xff08;图片来源于网络&#xff0c;侵删&#xff09;文丨熔财经作者|易不二2022年&#xff0c;在复星深陷债务压顶和变卖资产漩涡的而立之年&#xff0c;“消失”已久的郭广昌&#xff0c;在质疑与非议声中回国稳定军心&#xff0c;强调复星将在未来的五到十年迎来一个全新…

安卓反编译入门03-dex2jar反编译apk得到Java源代码

1.获取工具dex2jar下载地址&#xff1a;http://sourceforge.net/projects/dex2jar/files/直接下载下载完成后&#xff0c;解压得到文件夹dex2jar-2.0jd-gui下载地址&#xff1a;http://jd.benow.ca/ 直接下载&#xff08;官网版本无法复制中文&#xff0c;可以用这个&#xff0…

K8s pod 动态弹性扩缩容 HPA

一、概述Horizontal Pod Autoscaler&#xff08;HPA&#xff0c;Pod水平自动伸缩&#xff09;&#xff0c;根据平均 CPU 利用率、平均内存利用率或你指定的任何其他自定义指标自动调整 Deployment 、ReplicaSet 或 StatefulSet 或其他类似资源&#xff0c;实现部署的自动扩展和…

算法练习-二分查找(二)

算法练习-二分查找(二&#xff09; 文章目录算法练习-二分查找(二&#xff09;1 二分查找1.1 题目1.2 题解2 猜数字大小2.1 题目2.2 题解3 寻找比目标字母大的最小字母3.1 题目3.2题解4 搜索插入位置4.1 题目4.2 题解5 在排序数组中查找元素的第一个和最后一个位置5.1 题目5.2 …

34- PyTorch数据增强和迁移学习 (PyTorch系列) (深度学习)

知识要点 对vgg 模型进行迁移学习定义数据路径: train_dir os.path.join(base_dir, train) # base_dir ./dataset 定义转换格式: transform transforms.Compose([transforms.Resize((96, 96)), # 统一缩放transforms.ToTensor(), # 转换为tensortransforms.No…

如何查找你的IP地址?通过IP地址能直接定位到你家!

我们ip地址分为A、B、C、D、E共5类&#xff0c;每一类地址范围不同&#xff0c;从A到Eip地址范围依次递减&#xff0c;其中哦&#xff0c;D和E是保留地址&#xff0c;我们用不了。A、B、C3类地址很多都被美国这样的西方国家分走了&#xff0c;而留给我们的就剩有限的地址了&…

记一次接口远程调用异常排查链路 Remote peer closed connection before all data could be read

前言&#xff1a; 异常信息&#xff1a; java.io.IOException: UT000128: Remote peer closed connection before all data could be read 在九月份-十月初一直都被这个问题困扰&#xff5e; 排查链路 第一次、二次、三次排查该问题&#xff1a; 当时看到”Remote peer c…

支持在局域网使用的项目管理系统有哪些?5款软件对比

一、选择私有部署的原因以及该方案的优点有很多可能的原因导致人们更倾向于使用私有部署的企业管理软件&#xff0c;其中一些原因可能包括&#xff1a;1.数据安全性要求&#xff1a;一些企业管理软件包含敏感的商业数据和隐私信息&#xff0c;为了保护这些信息不被未经授权的第…

MyBatisPlus中的条件构造器Wrapper

引言为什么要了解Wrapper&#xff1f;Wrapper解决的了什么问题&#xff1f;一、Wrapper&#xff1a;条件构造抽象类&#xff0c;用来解决单表操作出现的一些复杂问题,例如排序&#xff0c;和模糊查询等等结构图文字解释AbstractWrapper &#xff1a; 用于查询条件封装&#xff…

java设计模式学习

一、设计模式7大原则1.单一职责原则 (Single Responsibility Principle) 在类级别和方法级别进行职责规划&#xff0c;专人专事2.开放-关闭原则 (Open-Closed Principle) 增加接口功能时&#xff0c;尽可能不要修改原有代码3.里氏替换原则 (Liskov Substitution Principle) 子类…

华为HCIE学习之Openstack keystone组件

文章目录一、keystone对象模型二、使用token的好处Token的实现模式1、UUID Token,每次验证需要访问keystone服务端2、PKI Token 验证&#xff0c;在客户端即可完成 发放公钥 私钥解密3、RBAC三、policy.json权限实验一、keystone对象模型 二、使用token的好处 1、token缓存在客…

什么是数字化?企业如何实现数字化?

随着社会的发展与时代的进步&#xff0c;以生产为核心的企业也在进行不断的创新&#xff0c;而新一代信息技术的应用深化&#xff0c;制造业迎来了数字化转型新机遇。数字化转型近些年更多的被提及&#xff0c;越来越多的企业想通过数字化的转型&#xff0c;降低企业运营成本&a…

《Ansible变量篇:ansible中事实变量facts》

一、简介 facts组件是ansible用于采集被管理机器设备信息的一个功能, 采集的机器设备信息主要包含IP地址,操作系统,以太网设备,mac地址,时间/日期相关数据,硬件信息等。 ansible有一个模块叫setup,用于获取远程主机的相关信息,并可以将这些信息作为变量在playbook里进行调用,而…

【python】剑指offer代码大集合

剑指 Offer(第 2 版) https://leetcode.cn/problem-list/xb9nqhhg/ 剑指 Offer 03. 数组中重复的数字 https://leetcode.cn/problems/shu-zu-zhong-zhong-fu-de-shu-zi-lcof/ # 法1:哈希表(Set) class Solution:def findRepeatNumber(self, nums: [

CentOS8基础篇12:使用RPM管理telnet-server软件包

一、RPM包管理工具简介 RedHat软件包管理工具(RedHat Package Manager&#xff0c;RPM) RPM软件包工具常用于软件包的安装、查询、更新升级、校验、卸载以及生成.rpm格式的软件包等操作。 RPM软件包工具只能管理后缀是.rpm的软件包。软件包的命名格式&#xff1a; 软件名称…

java 实现pgsql数据库免密备份 Windows版本

阐述下背景&#xff1a; 最近公司项目中有个功能模块&#xff0c;需要使用java实现pgsql数据库整库的数据备份&#xff0c;没有pgsql使用经验的我&#xff0c;在网上寻找了好多大神的帖子&#xff0c;也没发现适合自己当前场景的解决方案&#xff0c;但是我把大神们的帖子按照自…