1.给定一个非负整数数组,您最初定位在数组的第一个索引处。数组中的每个元素表示该位置的最大跳转长度。确定您是否能够到达最后一个索引。
public class Solution {
public boolean canJump(int[] A) {
int n=A.length;
int maxReach = 0;
for(int i=0;i<n && i<=maxReach;i++)
maxReach = Math.max(maxReach,i+A[i]); // 跳到该点后还能到达的极限
if(maxReach<n-1)
return false;
return true;
}
}
2.给定一个数组序列,序列中每一个元素的值表示最多可以向后跳多远,初始时从下标0开始,计算最少跳多少次可以到达末尾的元素位置。
public class Solution {
public int jump(int[] A) {
int[] dp = new int[A.length]; // dp存放都到各点的最小步数
for (int i = 0; i < dp.length; i ++) {
int maxPosition = Math.min(i + A[i], A.length - 1); // 从i点出发能走的最远距离
for (int j = i + 1; j <= maxPosition; j ++) {
if(dp[j] == 0) dp[j] = dp[i] + 1; // 如果位置没被走过,则到达j点的步数为dp[i]+1
}
if(dp[A.length - 1] != 0) break; // 当第一次到达终点时,肯定是到达终点最短的步数
}
return dp[A.length - 1];
}
}