【LeetCode精选TOP面试题】55-跳跃游戏
2022/03/11 10:16:47
给定一个非负整数数组 nums ,你最初位于数组的 第一个下标 。
数组中的每个元素代表你在该位置可以跳跃的最大长度。
判断你是否能够到达最后一个下标。
贪心解法
思路
维护最远可达的距离 furthest,furthest 一开始为 0,表示从下标 0 开始。
遍历 nums 中的每一位,下标为 i,从 i 处可达的最远距离为 i + nums[i]
,则 furthest = Math.max(furthest, i + nums[i])
。
遍历时需判断是否可到达 i,furthest >= i
时可达。
复杂度
- 时间复杂度:O(n)。
- 空间复杂度:O(1)。
代码
var canJump = function (nums) {
if (nums.length <= 1) {
return true;
}
let furthest = 0; // 最远可达距离
for (let i = 0; i < nums.length - 1; i++) {
// 判断当前位是否可达
if (furthest < i) {
return false;
}
// 更新最远可达位置
furthest = Math.max(furthest, i + nums[i]);
// 可达最后位时退出
if (furthest >= nums.length - 1) {
return true;
}
}
return false;
};