LeetCoda 45 跳躍遊戲2

2021-09-11 20:16:30 字數 1161 閱讀 2534

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

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

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

示例:

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

輸出: 2

解釋: 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳1步,然後跳 3步到達陣列的最後乙個位置。

# 思路:動態規劃--備忘錄

class solution:

def jump(self, nums):

""":type nums: list[int]

:rtype: int

length:跳躍的總長度

step+nums[i]:當前剩餘步數

max(step, nums[i]):選擇最大剩餘步數

"""n = len(nums)

if n == 1:

return 0

step = 0

start = 0 # 下次跳躍的起始位置

limit = 0 + nums[0] # 本次跳躍能跳到的最大位置

maxpos = 0 # 下次跳躍能跳到的最大位置

for i in range(n):

p = i + nums[i]

if p > maxpos:

maxpos = p

jump_pt = i

lastpoint = i # 最後乙個起跳點

break

if i == limit: # 如果遍歷到本次跳躍的最大位置依然還不能到達終點,那麼必須開始下一次跳躍

limit = maxpos # 更新下一次跳躍的最大位置

start = jump_pt # 更新下一次跳躍的起跳點

step += 1

if start != lastpoint: # 必須先從start跳到lastpoint,再從lastpoint跳到終點

step += 2

else: # 當start與lastpoint重合時,只需跳一次。當且僅當start=lastpoint=0時成立

step += 1

return step

LeetCode 45 跳躍遊戲2

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。這一條題目有兩思路,乙個是 貪心演算法,還有乙個是轉化為圖的形式考慮,使用bfs演算法,我先寫下bfs思路,greedy 我還有點問題。bfs此題就...

leetcode45 跳躍遊戲2

一.因為求解的是乙個最優化問題,所以第乙個想到的是動態規劃,但是很可惜的是超時了.令dp i 為可以跳躍到i的最小跳躍次數.二.直接參考題解了.1.解法一 順藤摸瓜 2.貪婪演算法,我們每次在可跳範圍內選擇可以使得跳的更遠的位置。每次找區域性最優,最後達到全域性最優.3.寫 的話,我們用 end 表...

Leedcode45 跳躍遊戲2

class solution f i 代表從從索引i到達最後需要的最少步數 dp f i 1代表其無法到達最後 void addnew int f,int nums,int index for int i firstposi i index 1 i 只看f index 到達的聊得地方 else 無法...