leetcode 45 跳躍遊戲 II

2021-10-23 10:16:51 字數 2245 閱讀 4374

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。

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

你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。

示例:

輸入: [2,3,1,1,4]

輸出: 2

解釋: 跳到最後乙個位置的最小跳躍數是 2。

從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後乙個位置。

說明:

假設你總是可以到達陣列的最後乙個位置。

dp[i]表示到大a[i]的最小步數,則轉移方程:

d p[

i]=m

in(d

p[k]

+1),

k∈[0

,i),

ifa[

k]+k

≥i

dp[i] = min(dp[k] + 1), k \in [0, i), if \; a[k] + k \geq i

dp[i]=

min(

dp[k

]+1)

,k∈[

0,i)

,ifa

[k]+

k≥i時間複雜度是o(n

2)

o(n^2)

o(n2

),超時了

貪心版:

基本思路和跳躍遊戲很相似

每次都更新當前位置能跳到的最大位置,同時儲存乙個本次起跳能跳到的最大範圍,如果當前的位置超過了上一次跳到的最大範圍,那麼就說明還要再跳1次,jump_cnt += 1,然後更新能跳到的最大範圍即可

注意,這裡和跳躍遊戲不太一樣的地方在於,不要遍歷到最後乙個節點,否則可能會多計算一次跳躍。但是跳躍遊戲需要遍歷到最後乙個節點,因為需要檢查是否能跳到頭。

舉例來說,對於這樣的陣列:

[7,0,9,6,9,6,1,7,9,0,1,2,9,0,3]

一開始從7跳,則能跳到的範圍是:

<-|

7,0,9,6,9,6,1,0|,9,0,1,2,9,1,3

<-|

在這個範圍內移動,每一步都更新能跳到的最大範圍,然後當指標走到這個範圍的最右邊時,就找到了這個範圍內能跳到的最大值13(從第2個9跳),此時需要再次跳了。再次跳時選擇最大值跳(從第2個9跳),jump_cnt += 1,同時更新當前能跳到的最右邊界為這個範圍內跳的最大值,也即13,下次遍歷時,變成這樣:

<-|

7,0,9,6,9,6,1,0,9,0,1,2,9,1|,3

<-|

以此類推即可

dp版:

class

solution

:def

jump

(self, nums: list[

int])-

>

int:

dp =

for i, each_jump in

enumerate

(nums)

: candidate =[1

+ dp[k]

for k in

range

(i)if nums[k]

+ k >= i]

min(candidate)

if candidate else0)

print

(i, candidate, dp)

return dp[-1

]

貪心版:

class

solution

:def

jump

(self, nums: list[

int])-

>

int:

cur_end, max_position =0,

0 cnt =

0for i in

range

(len

(nums)-1

):max_position =

max(max_position, nums[i]

+ i)

if i == cur_end:

cnt +=

1 cur_end = max_position

return cnt

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 步...