前言
每天和你一起刷 LeetCode 每日一题~
大家国庆节快乐呀~
LeetCode 启动!
突然发现,国庆的每日一题,不是坐公交就是坐火车,不是坐火车就是做飞机,这就是你的国庆旅游计划吗!力扣!
题目:完成旅途的最少时间
代码与解题思路
国庆期间力扣居然连出了两道二分答案的题目,这道题相比上一题对我而言相对简单一些,前几天的那道题的浮点数控制还是有些难度的
不说题外话了,讲讲这道题有哪些需要注意的点:
1、如何找到二分答案的上下界?
下界通过看题目给出的数据范围即可,最小的总路程是 1,那最少花费的时间也只能是 1。
上界该如何判断呢? 如果题目比较直接,那可以直接通过数据范围来设定,这道题显然不太容易判断出来,那我们就寻找一个极限的情况,假设 time 只有一个值 min,那我们最长需要的时间就是 totalTrips * min,time 如果增加其他元素,最后的答案时间会变小
也就是 totalTrips * min,就是题目能到达的最长时间,这样就能将他作为二分的上界了
2、check 函数的实现
二分题目的核心,不过这道题比较简单,直接遍历 time 数组,让 sum 累加当前的 totalTrips(即二分出来的 mid)/ time 的各个元素即可获得总的旅程数。
func minimumTime(time []int, totalTrips int) int64 {
l, r := 1, totalTrips*slices.Min(time) // 二分的上下界
for l < r {
mid := (l+r)>>1
sum := 0
for _, v := range time {
sum += mid/v
}
if sum < totalTrips {
l = mid+1
} else {
r = mid
}
}
return int64(l)
}
视频实况
【【LeetCode】每日一题 2024_10_5 完成旅途的最少时间(二分答案)】
每天进步一点点
可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。