LeetCode 45 跳躍遊戲 II

2021-10-04 21:30:20 字數 1173 閱讀 4941

題目描述:

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

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

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

示例:輸入:[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 步...