LeetCode 55. 跳躍游戲(Jump Game)


 

題目描述

 

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

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

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

 

示例 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 };

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM