【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;
}
相关推荐
2401_8572979122 分钟前
招联金融秋招内推2025
java·前端·算法·金融·求职招聘
小媛早点睡22 分钟前
day02笔试练习
java·开发语言·算法
倔强的石头10624 分钟前
【C语言指南】数据类型详解(下)——自定义类型
c语言·开发语言·html
羊小猪~~25 分钟前
数学建模--什么是数学建模?数学建模应该怎么准备?
算法·数学建模·分类·回归
東木_叁貳陸伍29 分钟前
[题解] [SDOI2011] 消防
算法
挥剑决浮云 -33 分钟前
leetcode 数组 27.移除元素
c++·算法·leetcode
&梧桐树夏34 分钟前
【算法系列-链表】交换链表节点(反转 + 交换)
数据结构·算法·链表
攻城狮7号38 分钟前
【4.7】图搜索算法-DFS和BFS解根到叶子节点数字之和
c++·算法·深度优先·宽度优先·图搜索算法
南风与鱼1 小时前
优选算法之 分治-归并排序
数据结构·算法·归并排序
Solitary-walk1 小时前
【无标题】
开发语言·数据结构·c++·git·算法·visual studio