hello 大家好!今天开写一个新章节,每一天一道算法题。让我们一起来学习算法思维吧!

javascript
/**
* 使用贪心算法判断是否能到达数组的最后一个下标
* @param {number[]} nums - 输入的非负整数数组
* @return {boolean} - 若能到达最后一个下标返回 true,否则返回 false
*/
function canJump(nums) {
// 初始化最大可到达的位置为 0
let maxReach = 0;
// 遍历数组中的每个元素
for (let i = 0; i < nums.length; i++) {
// 如果当前位置超过了最大可到达的位置,说明无法到达该位置,返回 false
if (i > maxReach) {
return false;
}
// 更新最大可到达的位置,取当前最大可到达位置和当前位置能跳到的最远位置的较大值
maxReach = Math.max(maxReach, i + nums[i]);
// 如果最大可到达位置已经能到达或超过最后一个下标,返回 true
if (maxReach >= nums.length - 1) {
return true;
}
}
// 遍历完数组都未到达最后一个下标,返回 false
return false;
}
代码解释
初始化: 定义 maxReach 变量,用于记录当前能到达的最大位置,初始值为 0。
遍历数组:
对于数组中的每个位置 i,首先检查 i 是否大于 maxReach,如果是,说明无法到达该位置,直接返回 false。
接着更新 maxReach,通过比较当前 maxReach 和 i + nums[i] 的大小,取较大值作为新的 maxReach,i + nums[i] 表示从当前位置 i 能跳到的最远位置。
然后检查 maxReach 是否已经能到达或超过数组的最后一个下标,如果是,返回 true。
返回结果: 如果遍历完整个数组都没有满足能到达最后一个下标的条件,返回 false。