【LeetCode】每日一题 2024_10_2 准时到达的列车最小时速(二分答案)

前言

每天和你一起刷 LeetCode 每日一题~

大家国庆节快乐呀~

LeetCode 启动!

题目:准时到达的列车最小时速

代码与解题思路

今天这道题是经典的二分答案,结合这道题来讲就是,二分列车的速度

我最擅长的两个算法:一个是二分,一个是滑动窗口,那趁着今天的题目是二分相关,就顺便分享一下我用的二分模版

整数二分模板

模板一:用于左半区间不存在答案,而右半区间存在答案的情况,也就是在 [ left,mid ],[ mid + 1,right ]

C++ 版本

cpp 复制代码
int l = 0, r = n - 1;
while (l < r) {
    int mid = l + r >> 1;
    if (check(mid)) r = mid;
    else l = mid + 1;
}

Golang 版本

go 复制代码
l, r := 0, len(nums)-1
for l < r {
    mid := l+(r-l)/2
    if check(mid) {
        r = mid
    } else {
        l = mid + 1
    }
}

模板二:用于左半区间存在答案,而右半区间不存在答案的情况,也就是在 [ left,mid - 1 ],[ mid,right ]

C++ 版本

cpp 复制代码
 int l = 0, r = n - 1;
 while (l < r) {
     int mid = l + r + 1 >> 1;
     if (check(mid)) l = mid;
     else r = mid - 1;
 }

Golang 版本

go 复制代码
l, r = 0, len(nums)-1
for l < r {
    mid := l+(r-l+1)/2
    if check(mid) {
        l = mid 
    } else {
        r = mid - 1
    }
}

模板记忆方法:有 - 1,那求 mid 的时候就需要 + 1


这两个模板包含了整数二分的所有情况,至少我到现在还没有碰到这两个模板解决不了的整数二分题目,当然,模版只是模版,多练习题目才是提升算法能力的王道

不妨就用今天的题目来试试我这个模版吧~

go 复制代码
func minSpeedOnTime(dist []int, hour float64) int {
	length := len(dist)
	check := func(speed float64) bool {
		var cost float64
		for _, v := range dist[:length-1] {
			cost += math.Ceil(float64(v) / speed) // 上取整
		}
		cost += float64(dist[length-1]) / speed // 最后一趟不用取整
		return cost <= hour // 能准时到达就返回 true
	}

	if hour <= float64(length-1) { // 最短一个小时一趟车,车次超过最短时间直接返回 -1
		return -1
	}

	left, right := 1, 10000000
	for left < right {
		mid := (left + right) / 2
		if check(float64(mid)) {
			right = mid
		} else { // 不能准时到达,让 speed 增大
			left = mid + 1
		}
	}
	return left
}

视频实况

【【LeetCode】每日一题 2024_10_2 准时到达的列车最小时速(二分答案)】

每天进步一点点

可以和我刷一辈子的每日一题吗?

一题一题,积累起来就是一辈子。

相关推荐
I_LPL7 小时前
hot100贪心专题
数据结构·算法·leetcode·贪心
颜酱7 小时前
DFS 岛屿系列题全解析
javascript·后端·算法
WolfGang0073218 小时前
代码随想录算法训练营 Day16 | 二叉树 part06
算法
2401_831824969 小时前
代码性能剖析工具
开发语言·c++·算法
Sunshine for you10 小时前
C++中的职责链模式实战
开发语言·c++·算法
qq_4160187210 小时前
C++中的状态模式
开发语言·c++·算法
2401_8845632410 小时前
模板代码生成工具
开发语言·c++·算法
2401_8319207410 小时前
C++代码国际化支持
开发语言·c++·算法
m0_6727033111 小时前
上机练习第51天
数据结构·c++·算法
ArturiaZ11 小时前
【day60】
算法·深度优先·图论