Jump Game1和2:陣列序列,每個元素的值表示最多可以向後跳多遠,計算最少跳多少次可以到達末尾
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];
}
}