題目描述:
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。
示例:輸入:[2
,3,1
,1,4
]輸出:
2解釋: 跳到最後乙個位置的最小跳躍數是 2。
從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後乙個位置。
解題過程:
整個過程很艱辛,我剛開始的思路是每種情況都走,但是殊不知,這是乙個可以貪心的問題,學識淺薄啊…
貪心思路:
每次在可選的範圍內跳的最遠的就是最終步數最少的選擇
例如:上述中的例子,在剛開始時,可選位置是1或者2,則選擇可以跳的更遠的位置,即位置1.
上**(**是看了題解之後的):不得不說,大佬就是大佬呢
class
solution
:def
jump
(self, nums: list[
int])-
>
int:
#記錄當前可選範圍
end=
0# 記錄最遠的地方
maxpox=
0#步數
step=
0# 遍歷陣列
#不去遍歷陣列最後乙個,為了防止,剛好到達最後乙個的特殊情況。
for i in
range(0
,len
(nums)-1
):#不斷的更新最遠到達的地方
maxpox=
max(maxpox,nums[i]
+i)# 已到達可選範圍
if(end==i)
:#更新新的可選範圍,更新,即選擇跳躍
end=maxpox
#更新步數
step+=
1return step
這個**很巧妙:從前到後的遍歷,一方面保證了,在可到達的範圍中(i小於的範圍內maxpox不斷更新),找乙個最遠到達的地方。當到達可控範圍的時候,就會跳躍(步數加一,同時會產生新的可選擇範圍==maxpox,即選擇跳躍到可以到達最遠地方的這個位置)
當到達最終的位置後的step即為所求。
Leetcode 45 跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...
Leetcode 45 跳躍遊戲
貪心 由區域性最優匯出全域性最優。對於該點能跳到的所有點loc 1 nums loc 考慮跳到之後還能跳多遠k nums loc k 哪個點最遠就跳到哪。學習題解的寫法 貪心的思想不變 還是找目前最有利的選擇來構成全域性最佳!在每一跳內找下一次的最遠距離!maxpos為在考慮範圍內能找到的跳到的最遠...
leetcode 45 跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步...