【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;
}
相关推荐
小鱼仙官24 分钟前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
荆棘鸟智能42 分钟前
扬尘在线监测数据接入与异常清洗:从断点补传到质量审计
人工智能·算法·系统架构
文丑颜不良啊1 小时前
LeetCode926~950题目解析
java·leetcode
动词ing1 小时前
【题目练习】旋转图像
算法
天疆说1 小时前
【无标题】
算法
GG.WinGel2 小时前
三元组中心问题
java·数据结构·算法·青少年编程·蓝桥杯
开开心心就好2 小时前
电脑小说阅读器,支持朗读和自定义皮肤
服务器·开发语言·javascript·算法·pdf·c#·音视频
闻缺陷则喜何志丹2 小时前
【c++20】协程与屏障
c++·算法·c++20·携程·屏障
erzong2312 小时前
Linux操作系统:线程池&踩坑修复
linux·运维·算法
alphaTao3 小时前
LeetCode 每日一题 2026/10/19-2026/10/25
算法·leetcode