跳躍遊戲 python實現
阿新 • • 發佈:2018-12-23
題目描述
給定一個非負整數陣列,你最初位於陣列的第一個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後一個位置。
示例 1:
輸入: [2,3,1,1,4]
輸出: true
解釋: 從位置 0 到 1 跳 1 步, 然後跳 3 步到達最後一個位置。
示例 2:
輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後一個位置。
解題思路
這位播主寫的很好,講解了使用動態規劃,和貪婪演算法兩種解法(這裡感慨一下:貪婪演算法,我已經基本快想出來了,只要稍微改變一下就OK了,可是最後還是忍不住看了答案。。。。遺憾,所以大家在刷題目的時候碰到不會的,多給自己一點時間)
python程式碼實現
class Solution:
@staticmethod
def canJump_greedy(nums):
"""
使用貪心演算法求解 https://blog.csdn.net/shinanhualiu/article/details/50550825
max_arrived表示的是截至到i位置所能到達的最遠距離
:type nums: List[int]
:rtype: bool
"""
len_nums=len(nums)
max_arrived= 0
for i,num in enumerate(nums):
if i==0:
max_arrived=i+num
elif max_arrived>=i:
max_arrived=(max(i+num,max_arrived))
else:
return False
if max_arrived>=len_nums-1:
return True
return False
@staticmethod
def canJump_dp(nums):
"""
使用動態規劃求解 https://blog.csdn.net/shinanhualiu/article/details/50550825
dp[i]表示的是截至到i位置所能到達的最遠距離
:type nums: List[int]
:rtype: bool
"""
len_nums=len(nums)
dp=[]
for i,num in enumerate(nums):
if i==0:
dp.append(i+num)
elif dp[i-1]>=i:
dp.append(max(i+num,dp[i-1]))
else:
dp.append(0)
if dp[i]>=len_nums-1:
return True
return False