【6010.完成旅途的最少时间】力扣周赛第282场,使用二分法
6010.完成旅途的最少时间
最需要注意的地方!
这个范围太大了,int根本解决不了,因此里面变量的声明也要用long
解题思路
居然是二分法..(我自己根本想不到,早上周赛做的时候一直超时...唉!)
让我们求出完成 至少 totalTrips 趟旅途需要花费的 最少 时间,是一个求下界的问题。既然暴力会超时,那就只能用别的方法。
这里二分法是用于解空间。l是解空间的下界,r是解空间上界。
先将这个车辆行驶时间进行排序
解空间的上界 r 通过计算 time[0] * totalTrips得到 ,即得到 旅途花费的 最多 时间,因为当有其他车辆在花费时间最多之内也能跑完则会使得车次跑完旅途的次数+1。
自己遇到3-4个样例没过的原因
- long r = 1L * time[0] * totalTrips;//只用第一个车
- 注意这里先乘1L。有一次是放在后面乘的结果有样例不过
- //计算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;
}
}
二分法问题推荐看力扣上的这篇文章
一个模板通杀所有「二分查找」问题,对比「闭区间」和「左开右闭」两种写法,看不懂算我输!
个人感觉他把问题划分为求下届和求上界,挺清晰的。
分类:
leedcode
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本