LeetCode 55. 跳躍遊戲(Jump Game)
阿新 • • 發佈:2018-05-13
更新 你在 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 intsize=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 } 17return false; 18 } 19 };
LeetCode 55. 跳躍遊戲(Jump Game)