【leetcode】 45.跳跃游戏 ||

如果我们「贪心」地进行正向查找,每次找到可到达的最远位置,就可以在线性时间内得到最少的跳跃次数。

例如,对于数组 [2,3,1,2,4,2,3],初始位置是下标 0,从下标 0 出发,最远可到达下标 2。下标 0 可到达的位置中,下标 1 的值是 3,从下标 1 出发可以达到更远的位置,因此第一步到达下标 1。

从下标 1 出发,最远可到达下标 4。下标 1 可到达的位置中,下标 4 的值是 4 ,从下标 4 出发可以达到更远的位置,因此第二步到达下标 4。

在具体的实现中,我们维护当前能够到达的最大下标位置,记为边界。我们从左到右遍历数组,到达边界时,更新边界并将跳跃次数增加 1。

在遍历数组时,我们不访问最后一个元素,这是因为在访问最后一个元素之前,我们的边界一定大于等于最后一个位置,否则就无法跳到最后一个位置了。如果访问最后一个元素,在边界正好为最后一个位置的情况下,我们会增加一次「不必要的跳跃次数」,因此我们不必访问最后一个元素。

作者:力扣官方题解

代码:

cpp 复制代码
int jump(int* nums, int numsSize) 
{
	int max = 0;
	int i = 0,steps = 0;
    int end=0;
	
	for (i = 0; i < numsSize-1; i++)
	{	
			max = max < (nums[i] + i) ? (nums[i] + i) : max;//最远能到达的位置
			if (i==end)
			{
				end = max;
                steps++;
			}
    
	}
    return steps;
}
相关推荐
WBluuue12 分钟前
Codeforces 1087 Div2(ABCDEF)
c++·算法
Yzzz-F37 分钟前
2025 ICPC武汉邀请赛 G [根号分治 容斥原理+DP]
算法
abant242 分钟前
leetcode 114 二叉树变链表
算法·leetcode·链表
tankeven44 分钟前
HJ165 小红的优惠券
c++·算法
先积累问题,再逐次解决1 小时前
快速幂优美算法
算法
XiYang-DING1 小时前
【LeetCode】 225.用队列实现栈
算法·leetcode·职场和发展
花月C2 小时前
线性动态规划(Linear DP)
算法·动态规划·代理模式
派大星~课堂2 小时前
【力扣-148. 排序链表】Python笔记
python·leetcode·链表
hetao17338372 小时前
2025-03-24~04-06 hetao1733837 的刷题记录
c++·算法