SOURCE

//跳跃游戏
/*
给定一个非负整数组nums,你在最初位置数组的下方的第一个角标

数组中的每个元素代表你在该位置可以跳跃的最大长度

判断你是否可以到达最后一个下标
*/

const canJump = (nums) => {
    const len = nums.length;
    let maxJumpStep = 0;

    for (let i = 0; i < len; i++) {
        if (i > maxJumpStep) {
            return false;
        }

        maxJumpStep = Math.max(maxJumpStep, i + nums[i]);
    };

    return true;
};

const canJump2 = (nums) => {
    const len = nums.length;
    const needMaxStep = len - 1;

    for (let i = 0; i < len; i++) {
        if (nums[i] + i >= needMaxStep) {
            return true;
        };
    };

    return true;
};

const jump = (nums) => {
    const needJumpMaxStep = nums.length;

    let currentMaxJump = nums[0];

    let jumpCount = 1;
    let i = 0;

    while (currentMaxJump < needJumpMaxStep) {
        let temp = i;
        let maxStep = 0;

        for (let j = i + 1; j < currentMaxJump; j++) {
            maxStep = Math.max(maxStep, nums[j]);
            temp = j;
        };

        jumpCount += 1;
        i = temp;
        currentMaxJump =  nums[i] + i;
    };

    return jumpCount;
};
console 命令行工具 X clear

                    
>
console