题链接:https://leetcode-cn.com/problems/jump-game/
题描述:
解题思路:
对于位置 i 上的元素,它可以跳跃到的最远位置为 i + nums[i],如果某个元素跳跃的最远位置超出或等于数组末尾的位置则返回 true。
即,我们依次遍历数组元素,并实时维护一个最远位置,对于当前遍历元素,如果该元素在最远位置内,则代表该元素是可到达的。
代码实现:
/**
* @param {number[]} nums
* @return {boolean}
*/
var canJump = function(nums) {
if (nums.length == 1) {
return true;
}
let maxStep;
maxStep = nums[0];
for (let i = 1; i < nums.length; i++) {
if (maxStep >= nums.length - 1) {
return true;
}
if (i <= maxStep && i + nums[i] > maxStep) {
maxStep = i + nums[i];
}
}
return false;
};
时间复杂度:O(n)
空间复杂度:O(1)