当前位置: 首页 > article >正文

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

前言

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

大家国庆节快乐呀~

LeetCode 启动!

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

代码与解题思路

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

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

整数二分模板

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

C++ 版本

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

Golang 版本

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++ 版本

 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 版本

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


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

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

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 准时到达的列车最小时速(二分答案)】

每天进步一点点

可以和我刷一辈子的每日一题吗?
一题一题,积累起来就是一辈子。


http://www.kler.cn/news/335305.html

相关文章:

  • “衣依”服装销售平台开发:Spring Boot实战指南
  • LeetCode讲解篇之239. 滑动窗口最大值
  • 数据结构与算法篇(树 - 常见术语)
  • Debezium系列之:Debezium 3.0.0.Final发布
  • M3u8视频由手机拷贝到电脑之后,通过potplayer播放报错找不到文件地址怎么解决?
  • 强化学习——基本概念
  • 傅里叶分析之掐死教程(完整版)更新于2014.06.06
  • Docker安装人大金仓(kingbase)关系型数据库教程
  • 通过URL与数据库交互(十三)
  • 教你快速成为洛谷红名大佬!2分钟学会,2个月成功!
  • MVVM 架构模式:解耦、可测试与高效
  • 【深度强化学习】DDPG实现的4个细节(OUNoise等)
  • 【Python】Hypercorn:轻量级的异步ASGI/WSGI服务器
  • ubuntu中挂载点内存不足,分配不合理后使用软链接的注意事项
  • C++ | Leetcode C++题解之第456题132模式
  • Linux中环境变量
  • S7-200 SMART Modbus RTU常见问题
  • 一文上手SpringSecurity【八】
  • SpringCloudStream+RocketMQ多topic
  • Spring Boot新闻推荐系统:技术与策略