力扣 55. 跳跃游戏

力扣 55. 跳跃游戏

image.png

image.png

讲一下我的思路

一开始我想的是倒序遍历,查看nums[i]==0的元素前面的值是否大于等于从0开始经过的距离,这种做法条件判断很繁琐,不是正确的做法。

下面讲解正确的做法

从前往后遍历。每次遍历到一个数,如果可以到达当前位置,就记录当前位置的下标i+nums[i]的值,记作maxLen,表示从当前位置出发可以到达的最远位置。循环结束后把maxLen和数组长度n-1作比较,看maxLen是否大于等于n-1,是则返回true,否则返回false。

class Solution {
    public boolean canJump(int[] nums) {
        int maxLen=nums[0], n=nums.length;
        for(int i=1; i<n; i++){
            if(i<=maxLen)maxLen=Math.max(maxLen, i+nums[i]);
        }
        return maxLen>=n-1? true: false;
    }
}

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注