思路:本题很容易陷入一个误区,也就是思考具体应该跳几步才能刚刚好达到终点,其实这是没必要的,我们只需要在遍历的过程中判断最长能够到达的范围是否超过终点即可。我们以题目中的[2,3,1,1,4]为例,我们没必要去考虑从2开始是走一步还是两步,只需要考虑从2开始能覆盖到的最大范围即可,一开始2只能覆盖到下标为2的位置,而走到下标为3的位置之后,可以覆盖到下标为[4]的位置,次数覆盖范围满足大于等于数组长度,可以成立
class Solution {
public boolean canJump(int[] nums) {
int range = 0;
if (nums.length == 1) return true;
for (int i = 0; i <= range; i++) {
// 每走一步就更新覆盖范围 看是否能更新出更大的范围
range = Math.max(nums[i] + i, range );
if(range >= nums.length - 1) return true;
}
return false;
}
}