55. 跳跃游戏
在跳跃游戏中,判断能否到达最后一个下标的关键在于计算每个位置的最远可达距离。对于数组中的每个下标 i,其最远可达距离为 i + nums[i]。
具体实现如下:遍历数组时,实时更新全局最远可达距离。若当前下标超出全局最远可达距离,说明无法到达该位置,返回 false;若成功遍历完数组且未出现上述情况,则说明可以到达最后一个下标,返回 true。
class Solution {
public:bool canJump(vector<int>& nums) {int n = nums.size();int mx = 0;//最右可达for (int i = 0; i < n;i++) {if (i > mx) {return false;}mx = max (mx,i + nums[i]);}return true;}
};
或者你也可以理解为如果最右可达大于等于最后一个下标,说明可以到达
class Solution {
public:bool canJump(vector<int>& nums) {int n = nums.size();int mx = 0;//最右可达for (int i = 0; mx < n - 1;i++) {if (i > mx) {return false;}mx = max (mx,i + nums[i]);}return true;}
};
时间复杂度:O(n),n为数组长度
空间复杂度:O(1)