1. 程式人生 > >LeetCode 55. 跳躍遊戲(Jump Game)

LeetCode 55. 跳躍遊戲(Jump Game)

更新 你在 ron 索引 etc urn -- bre nbsp

題目描述

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

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

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

示例 1:

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

示例 2:

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

解題思路

用貪心的思想,從數組第一個數開始遍歷,保存一個值far為在當前位置能跳躍的最大長度。具體來說far初值賦為-1,對於每個位置:

  • 判斷當前位置跳躍的長度是否大於far,若大於則更新far為當前數字
  • 判斷從當前位置跳躍far的長度能否到達最後一個位置,若能就返回true
  • 判斷far是否等於0,若為0說明在當前位置一步也無法跳躍,所以停止遍歷並返回false
  • 將當前位置能跳躍的最大長度減1,繼續判斷下個位置能跳躍的最大長度

代碼

 1 class Solution {
 2 public:
 3     bool canJump(vector<int>& nums) {
 4         if(nums.empty())
 5             return false;
 6         int
size=nums.size(); 7 int far=-1; 8 for(int i=0;i<size;i++){ 9 if(nums[i]>far) 10 far=nums[i]; 11 if(far>=size-i-1) 12 return true; 13 if(far==0) 14 break; 15 far--; 16 } 17
return false; 18 } 19 };

LeetCode 55. 跳躍遊戲(Jump Game)