问题描述:
Given an array ofnon-negative integers, you are initially positioned at the first index of thearray.
Each element in the arrayrepresents your maximum jump length at that position.
Determine if you are ableto reach the last index.
For example:
A = [2,3,1,1,4]
, return true
.
A = [3,2,1,0,4]
, return false
.
问题分析:
如:[3, 1, 2, 4, 0 ,1]
遍历数组,使用一个变量reach来记录数组所能达到的最远距离位置;
对于每一个位置,其可能达到的最远位置为i+nums[i];
因此,每走一步,只取最终最远的距离,如果前面能走到的距离比当前位置i所能到达的位置更远,则取前面的reach;如果i所能达到的最远距离比reach要远,则取i所能覆盖的距离为最新的reach;
不可达情况,即为走到的i位置,reach范围也就是前面所能达到的最远距离并未覆盖到i点,则表示不可达;这个一般发生在nums[i]=0的情况。
代码:
public class Solution {
public boolean canJump(int[] nums) {
int i = 0;
int n = nums.length;
for (int reach = 0; i < n && i <= reach; ++i)
reach = Math.max(i + nums[i], reach);
return i == n;
}
}