Leecode热题100---45:跳跃游戏②

题目 :

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

每个元素 numsi 表示从索引 i 向前跳转的最大长度 。

返回到达 numsn - 1 的最小跳跃次数。

思路:

  1. 如果某一个作为 起跳点 的格子可以跳跃的距离是 3,那么表示后面 3 个格子都可以作为 起跳点。

    1.1. 可以对每一个能作为 起跳点 的格子都尝试跳一次,把 能跳到最远的距离 不断更新。

  2. 如果从这个 起跳点 起跳叫做第 1 次 跳跃,那么从后面 3 个格子起跳 都 可以叫做第 2 次 跳跃。

  3. 所以,当一次 跳跃 结束时,从下一个格子开始,到现在 能跳到最远的距离,都 是下一次 跳跃 的 起跳点。

    3.1. 对每一次 跳跃 用 for 循环来模拟。

    3.1.1跳完一次之后,更新下一次 起跳点 的范围。

    3.1.2在新的范围内跳,更新 能跳到最远的距离。

  4. 记录 跳跃 次数,如果跳到了终点,就得到了结果。

C++:

cpp 复制代码
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

class Solution
{
public:
	int jump(vector<int>& nums)
	{
		int times = 0;
		int start = 0;
		int end = 1;
		int n =nums.size();
		while(end < n)
		{
			int maxPose = 0;
			for(int i = start; i<end; i++)
			{
				// 能跳到的最远距离
				maxPose = max(maxPose,i+nums[i]);
			}
			start = end;  // 下一次起跳范围开始的格子
			end = maxPose + 1;	// 下一次起跳范围结束的格子
			times++;
		}
		return times;
	}
};
相关推荐
All for pursuit.1 小时前
【动态规划-11】279.完全平方数
数据结构·c++·算法·leetcode·动态规划
Logic1012 小时前
C语言/数据结构位运算题解:异或XOR找出套碗游戏中的“幸运碗“——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
y1su2 小时前
Leetcode 单调栈模板
java·开发语言·数据结构·算法·leetcode
一只旭宝3 小时前
树的家族全景:从二叉树到 B+ 树
数据结构
垆边人似月.3 小时前
华为题:每日温度
数据结构·c++·算法
Peregrine93 小时前
数据结构 - > 树和二叉树
数据结构·算法
j7~3 小时前
【算法】专题四.前缀和:一维二维模板,配套 LeetCode 真题,结合同余定理、哈希前缀和,搞定子数组与子矩阵区间求和问题。
数据结构·c++·算法·前缀和·优选算法
启观川4 小时前
数据结构与算法 -第 3 章 常用算法-回溯算法
数据结构·笔记·python·算法
启观川12 小时前
数据结构与算法 -第 3 章 常用算法-动态规划
数据结构·笔记·python·算法
Logic10114 小时前
C语言/数据结构欧几里得算法题解:长方形切割最大正方形——贪心划分计数
c语言·数据结构·算法·贪心算法·时间复杂度·空间复杂度·欧几里得算法