【leetcode】55.跳跃游戏

100 阅读1分钟

image.png

贪心算法
题目简述:给定一个数组,其中每个元素代表能跳跃的最大步数,判断是否能到达终点。
使用maxReach来记录能到达的最远距离,i + nums[i]来计算能达到的最远地方

var canJump = function (nums) {
    // 能到达的最远距离
    let maxReach = 0
    for (let i = 0; i < nums.length; ++i) {
        // 如果当前的地方是maxReach不能触及的,那就中断了
        if (i > maxReach) {
            return false
        }
        // 更新 maxReach
        maxReach = Math.max(maxReach, i + nums[i])
        // maxReach 能到达最后
        if (maxReach >= nums.length - 1) {
            return true
        }
    }
    return false
};

对于这一题的思考,如果测试用例里面没有出现0,那么肯定是能到达终点的
如果里面出现了0,那就要看0的位置了,如果0的位置可以跳过去,那就可以到达终点
所以,如果我们观察0前面的数字,如果能把0跨过去,那就可以到达终点