【算法題 8】跳躍游戲


來源:LeetCode 第55題

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

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

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

示例 1:

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

示例 2:

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

代碼如下:

 1 class Solution:
 2     def canJump(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: bool
 6         """
 7         max_reach,last_index=0,len(nums)-1
 8         for i,x in enumerate(nums):
 9             if max_reach<i:
10                 return False
11             if max_reach>=last_index:
12                 return True
13             max_reach=max(max_reach,i+x)

 

來源:LeetCode 第45題

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

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

你的目標是使用最少的跳躍次數到達數組的最后一個位置。

示例:

輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最后一個位置的最小跳躍數是 2。
     從下標為 0 跳到下標為 1 的位置,跳 1 步,然后跳 3 步到達數組的最后一個位置。

說明:

假設你總是可以到達數組的最后一個位置。

 

 

思路如下:

 

代碼如下:

 1 class Solution:
 2     def jump(self, nums):
 3         """
 4         :type nums: List[int]
 5         :rtype: int
 6         """
 7         start=end=step=0
 8         while end<len(nums)-1:
 9             start,end=end+1,max(i+nums[i] for i in range(start,end+1))
10             step+=1
11         return step

 


免責聲明!

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



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