leetcode 45 跳躍遊戲 II

2021-10-23 09:18:35 字數 2089 閱讀 5486

45. 跳躍遊戲 ii

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

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

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

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

輸出: 2

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

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

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

首先計算每乙個點的能夠達到的最遠點,nums[ i ] + i

第一次執行,以第乙個點為起點,能夠達到的最遠點為max_pos,以[2, 3, 1, 1, 4] 舉例,第一次的最遠點索引為max_pos = 2,這個時候 pre==end, 更新邊界end, 這裡邊界的意思就是:以第乙個點為起點,走一步,最多走到end = 2(索引)。

之後遞增 i,即 i = , 當 i == 1的時候,我們可以計算出來乙個最遠點max_pos, 將其與之前求出的最遠點取max, 這裡更新 max_pos的意思就是,走第二步,最遠可以走到**(max_pos 當 pre == end的時候,end 會更新等於max_pos)。

以此類推,注意:我們迴圈的時候 最後乙個索引不用計算,因為我們的目的地就是大於等於最後乙個索引的位置。

from typing import list

#遞迴的方法,超時。

# class solution:

# def jump(self, nums: list[int]) -> int:

# final = len(nums)

# out =

# if final == 1: return 0

# def greed(start, count):

# if nums[start] + start >= final - 1:

# return

# mid = nums[start] + start

# for i in range(mid, start, -1):

# greed(i, count+1)

# greed(0, 0)

# return min(out)

class

solution

:def

jump

(self, nums: list[

int])-

>

int:

final =

len(nums)

max_pos, end, step =0,

0,0for pre in

range

(final-1)

:#計算每乙個數能夠到達的最遠點

max_pos =

max(max_pos, nums[pre]

+pre)

#如果本次邊界比之前的邊界大就更新

if pre == end:

#當達到之前一次能夠走的最遠點時,就步數加一,並且更新最遠頂的邊界

step +=

1 end = max_pos

return step

if __name__ ==

"__main__"

: s = solution(

)# nums = [2,3,1,1,2,3,1,2,3,2,3,1,1,2,1,1,1,4,2,1,1,1,4,3,4]

# nums = [2,3,2,1,1,1,4,3,4]

nums =[2

,3,1

,1,4

]# nums = [5,9,3,2,1,0,2,3,3,1,0,0]

# nums = [5,6,4,4,6,9,4,4,7,4,4,8,2,6,8,1,5,9,6,5,2,7,9,7,9,6,9,4,1,6,8,8,4,4,2,0,3,8,5]

print

(s.jump(nums)

)

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