給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後乙個位置。
示例 1
:輸入:[2
,3,1
,1,4
]輸出:
true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1
, 然後再從位置 1 跳 3 步到達最後乙個位置。
示例 2
:輸入:[3
,2,1
,0,4
]輸出:
false
解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後乙個位置。
思路:盡可能到達最遠位置(貪心)。
如果能到達某個位置,那一定能到達它前面的所有位置。
方法:初始化最遠位置為 0,然後遍歷陣列,如果當前位置能到達,並且當前位置+跳數》最遠位置,就更新最遠位置。最後比較最遠位置和陣列長度。
class solution:
def canjump
(self, nums: list[
int])-
>
bool
: k =
0for i in range
(len
(nums)):
if i > k :
return false
k =max(k,nums[i]
+i)return true
class solution:
def canjump
(self, nums: list[
int])-
>
bool
: dp=
[false]
*len
(nums)
dp[-1
]=true
index=
len(nums)-1
for i in range
(len
(nums)-2
,-1,
-1):
if index-i<=nums[i]
: index=i
dp[index]
=true
return dp[0]
99dong-tai-gui-hua-suan-fa-fu-za-du-o/
思路:動態規劃,如果能到最後乙個點,那麼必然有乙個從index=0 跳躍至index=len(nums)-1的過程。
演算法:首先,設定index為末尾節點index=len(nums)-1,然後從後往前遍歷輸入的列表,記索引為i,如果遍歷到的節點能跳躍至index節點,即nums[i]>=index-i,那麼重新設定index的值,index=i,並且i處的節點記錄為true。
模擬:[2,3,1,1,4] 可以看作從2->3->1->1->4,使用true表示經過的點,那麼我們可以用dp=[true,true,true,true,true]的列表表示經過的過程。
[2,3,1,1,4] 也可以看作2->1->1->4,那麼列表表示為dp=[true,false,true,true,true]
[3,2,1,0,4] 則看作dp=[false,false,false,false,true]
可以發現當dp[0]==true 時,表示該輸入是能夠到達末尾節點的。
LeetCode 跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 輸出 fa...
leetcode 跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。示例二 輸入 ...
leetcode跳躍遊戲
1.從後往前遍歷 設陣列長度len a.size 該題判斷能否到達最後乙個位置即len 1。1 開始時,設目標點為len 1,從倒數第二個元素開始往前遍歷,即從len 2,當前元素到目標點的距離為n,初始為n 1,因為倒數第二個到倒數第乙個只需要一步,2 判斷a len 2 的值是否大於n,如果大於...