讲一下我的思路
一开始我想的是倒序遍历,查看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;
}
}