1. 程式人生 > >Jump Game1和2:陣列序列,每個元素的值表示最多可以向後跳多遠,計算最少跳多少次可以到達末尾

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];
    }
}