力扣55:跳跃游戏
力扣55:跳跃游戏
- 题目
- 思路
- 代码
题目
给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。
思路
这道题的本质是求最远可以移动的距离,那么在数组的每一个位置时我们可以得到什么信息呢,当前位置也就是下标和可以移动的距离也就是数组值,那这两个值相加我们不就得到在当前位置可以移动的最远位置了吗。那么我们定义一个整型load当作当前可以移动的最远距离,然后从头开始遍历数组每到一个位置判断一下当前位置是否大于load如果大于就说明我们根本到不了这个地方也就直接返回false,如果可以到我们就可以判断当前位置加移动距离和load的大小关系了。遍历一整遍后都没没有返回false说明整个数组都可以到达所以返回true。
代码
class Solution {
public:bool canJump(vector<int>& nums) {// 最远能达到的位置int load = 0;for (int i = 0; i < nums.size(); i++) {// 判断能否到达此位置if (i > load) {return false;}load = max(load, i + nums[i]);}return true;}
};