給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。
示例:
輸入: [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 無法...