leetcode 2187. Minimum Time to Complete Trips(完成行程的最短时间)
创始人
2024-05-30 04:35:10
0

(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;}

相关内容

热门资讯

lpddr4内存手机有哪些-L... 嘿,小伙伴们,今天咱们来聊聊那些装了LPDDR4内存的手机,真是让人激动到不行!想象一下,你的手机里...
jq25ts与jq26ts的区... 嘿,朋友们,今天咱们聊聊那些年让我们激动不已的jq25ts和jq26ts!这两款“机”啊,真是让人又...
有效身份证件大全图片-有效身份... 哎呀,说到有效身份证件,我这心里就五味杂陈的!那些年,我们为了办个什么事儿,翻箱倒柜找身份证,那叫一...
北京小产权 算有房户吗-北京小... 哎呀,说起这北京的小产权房,我这心里啊,真是五味杂陈。你说,我这辛辛苦苦攒钱买的小产权房,算不算有房...
surface桌面图标大小-S... 哎哟喂,今天一打开我的Surface,差点没被那些桌面上的图标吓一跳!怎么回事啊,这些图标一个个都像...
安卓7.1系统流畅度评测-小米... 大家好,我是你们的小米手机,今天我要来吹一波我的操作系统——安卓7.1!哎呀,这系统,真的是快得让我...
linux 安装tuxedo-... 大家好,我是你们的好朋友小黑,今天咱们聊聊怎么在Linux上安装Tuxedo。哎呀,别怕,不是让你去...
windows2024ghos... 哎呀,说到这个Windows2024Ghost下载,我这心里就激动得不行!你知道吗,这可不只是一次简...
bbrowserboostsy... 天啊,我简直要疯了!刚刚还好好的,突然屏幕一黑,接着就是那个可怕的蓝屏,上面还写着“bbrowser...
ps4会员取消自动续费-如何取... 哎呀,说到这个PS4会员自动续费,我真是有一肚子的话要说!你是不是也经常在账单上看到莫名其妙的扣费,...
360恢复手机误删的视频-手滑... 哎呀妈呀,你们能想象那种感觉吗?就是那种,一不小心手滑,把手机里的宝贝视频给删了,心里那个急啊,简直...
mapinfo全国地图-用 M... 嘿,朋友,你有没有想过,我们脚下的这片土地,其实藏着无数的故事和秘密?今天,我要带你用MapInfo...
用名字可以查询身份证号码-仅知... 哎呀,今天听到一个消息,说是现在只要知道一个人的名字,就能查到他的身份证号码!这简直是让人目瞪口呆啊...
10240:程序员的秘密语言与... 在这个数字充斥的世界里,10240不仅仅是一个普通的数字组合,它是程序员们的秘密语言,是他们在代码海...
windows的桌面是指-Wi... 大家好,我是你们的朋友小W,今天咱们聊聊那个天天见面却可能不太了解的老朋友——Windows的桌面。...
杭州绿云酒店软件-绿云酒店软件... 每个人都渴望在旅途中找到一丝宁静和舒适。而我,一个对住宿体验有着独特情感的旅行者,最近在杭州的一家酒...
新能源汽车电控供应商:保障电池... 哎呀,说到我们这些新能源汽车电控供应商,真是心情复杂得像坐过山车一样!每天早上醒来,第一个念头就是:...
miui8哪个版本最省电-MI... 哎呀,说到MIUI8哪个版本最省电,这可是个大问题啊!每次手机电量一掉我就慌得不行,简直就是电量焦虑...
国产pc based控制器-国... 嘿,朋友们!今天咱们聊聊那些让我们心跳加速的国产PCBased控制器!这可不是普通的玩具,它们可是工...
js实现选项卡切换代码-用 J... 大家好,我是你们的编程小伙伴!今天我要跟大家分享一个超级酷炫的小技巧——用JavaScript实现选...