1. 程式人生 > >55. 跳躍遊戲

55. 跳躍遊戲

給定一個非負整數陣列,你最初位於陣列的第一個位置。

陣列中的每個元素代表你在該位置可以跳躍的最大長度。

判斷你是否能夠到達最後一個位置。

示例 1:

輸入: [2,3,1,1,4]
輸出: true
解釋: 從位置 0 到 1 跳 1 步, 然後跳 3 步到達最後一個位置。

示例 2:

輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後一個位置

貪心和動規的區別:

貪心演算法中,作出的每步貪心決策都無法改變,因為貪心策略是由上一步的最優解推導下一步的最優解,而上一步之前的最優解則不作保留。

動規演算法中,全域性最優解中一定包含某個區域性最優解,但不一定包含前一個區域性最優解,因此需要記錄之前的所有最優解。

本題屬於前者,因此是貪心演算法。

思路:採用貪心來做,設定變數aa表示當前所能達到的最遠的位置,那麼狀態轉移方程為aa = max(aa, nums[i] + i),括號裡的aa是上一步的最優解,因此是貪心。當到了某一個點 aa<=i 的時候,說明不能再繼續往前走了。如果該點在最後一個點之前,直接return false。

class Solution {     public boolean canJump(int[] nums) {         int n=nums.length;         int aa=0;         for (int i=0;i<n;i++){             if(aa<nums[i]+i) {                 aa=nums[i]+i;             }             if(aa<=i&&i<n-1) return false;         }                  return true;     } }