leetcode45 跳跃游戏II

题目

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums0

每个元素 numsi 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 numsi 处,你可以跳转到任意 numsi + j 处:

0 <= j <= numsi

i + j < n

返回到达 numsn - 1 的最小跳跃次数。生成的测试用例可以到达 numsn - 1

示例

输入: nums = 2,3,1,1,4

输出: 2

解释: 跳到最后一个位置的最小跳跃数是 2。

从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

解析

这道题和『跳跃游戏I』不同的就是上道题求能不能跳到终点,这道题求最小几步能跳到终点。

在遍历数组的时候,不必要访问数组的最后一个元素,因为题目保证了一定能跳到最后一个位置,那我们在访问最后一个元素的时候,我们的边界一定是大于等于最后一个元素。如果访问最后一个元素,在边界恰好为最后一个位置的情况下,会增加一次次数(解释的是下面代码中i < n-1的逻辑)。

举个例子:2,3,1,1,4 这个数组,开始的时候2可以跳到3或1的位置,假如跳到3,则又可以直接跳到终点,只需要两步即可;如果是i <= n-1的话,在n-1的位置又要算一下,然后命中step++,结果就不对了

go 复制代码
func jump(nums []int) int {
	n := len(nums)
	maxPosition := 0 // 最大可跳步数
	end := 0         // 边界
	step := 0
	for i := 0; i < n-1; i++ { // 这里要小于n-1
		maxPosition = max(maxPosition, i+nums[i])
		if i == end { // 每次到边界,就将边界更新成最大可跳步数,并将步数+1
			end = maxPosition
			step++
		}
	}
	return step
}
相关推荐
X12499281811 小时前
无畏契约更新后卡顿掉帧怎么办?黑屏闪退、游戏打不开解决方法
游戏
wind100323 小时前
VC++ 运行库 vcredist 安装失败|CLR 80131522 报错完整修复
开发语言·c++·游戏
Behaviour5 小时前
Unity游戏HybridCLR 热更新接入实战
游戏·unity·游戏引擎
2601_966563525 小时前
安卓单机游戏合集免费下载 内置修改版无限金币 2.3T 5000+游戏 无限金币、钻石、解锁全角色等修改
游戏
●VON11 小时前
谁小时候不想要一个游戏修改器?我把电脑 Skill 做成了 Android 小助手
android·游戏·电脑
本原财经18 小时前
卖游戏、筹H股,昆仑万维临IPO磨AI含金量
人工智能·游戏
FairGuard手游加固1 天前
iOS 游戏加固技术解析:代码混淆、资源加密、内存保护与重签名检测
安全·游戏·macos·unity·ios·objective-c
智恒百亿1 天前
RTX 5090 全场景技术应用解析:从游戏算力到专业生产力落地
大数据·服务器·游戏
cd_949217211 天前
AI纹理和Substance Painter手绘纹理哪个更适合游戏资产制作?
人工智能·游戏·substance painter
德迅云安全-上官1 天前
游戏攻防反套路:德迅云安全游戏盾如何破解黑产的“低成本精准打击”
网络·安全·游戏