leetcode 力扣 55 跳跃游戏

77 阅读1分钟

太抽象了这题的解法,明明写着是跳跃游戏,但是却要数组从左到右一个一个遍历,所以这题千万不要真的去跳跃nums[i]格。

既像动态规划又像贪心

public boolean canJump(int[] nums) {
        int len = nums.length;
        int rightMost = 0;

        for (int i = 0; i < len; i++) {
            if (i <= rightMost) {
                rightMost = Math.max(rightMost, i + nums[i]);

                if (rightMost >= len - 1) {
                    return true;
                }
            }
        }

        return false;
    }

nums = [2,3,1,1,4]
nums = [3,2,1,0,4]

i + nums[i]i表示距离开头的距离,rightMost = i + nums[i]则表示可以跳多远。如果i < rightMost,说明指针已经超过了最远可到达的距离,但是你还没跟上来,返回false。