【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;
}
相关推荐
李绍熹几秒前
C语言数组与指针示例
c语言·开发语言
lxmyzzs几秒前
【图像算法 - 40】海洋监测应用:基于 YOLO 与 OpenCV 的高精度海面目标检测系统实现
opencv·算法·yolo·海上目标检测
风筝在晴天搁浅1 分钟前
代码随想录 417.太平洋大西洋水流问题
算法
杨福瑞5 分钟前
数据结构:队列
c语言·数据结构
Tisfy9 分钟前
LeetCode 3606.优惠券校验器:分类 + 排序
leetcode·题解·排序
Zsy_05100310 分钟前
【数据结构】排序
数据结构·算法·排序算法
青山的青衫10 分钟前
【二分查找-开区间思维】
算法
Swift社区18 分钟前
LeetCode 449 - 序列化和反序列化二叉搜索树
算法·leetcode·职场和发展
charlie11451419123 分钟前
深入理解CC++的编译与链接技术9:动态库细节
c语言·开发语言·c++·学习·动态库
CoderYanger35 分钟前
贪心算法:3.最大数
java·算法·leetcode·贪心算法·1024程序员节