日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

文巾解题 45. 跳跃游戏 II

發(fā)布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文巾解题 45. 跳跃游戏 II 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1 題目描述

2 解題思路

2.1 記錄每個點可達的步數(shù)?

使用一個reach數(shù)組,reach[i]記錄到達坐標i的時候,需要幾跳。

對于每個點i,更新它向后nums[i]個點的reach值

一旦更新過了reach[len(nums)-1],也就是最后一個點的reach,那么返回。因為后面再更新這個reach,需要的跳數(shù)會更多

class Solution:def jump(self, nums: List[int]) -> int:reach=[0]l=len(nums)if(l==1):return(0)for i in range(l-1):reach.append(l+2)for i in range(l):for j in range(i+1,min(i+1+nums[i],l)):reach[j]=min(reach[j],reach[i]+1)if(i+1+nums[i]>=l):breakreturn(reach[-1])

時間復(fù)雜度 O(n^2) 【遍歷每個點需要O(n),每個點又要更新它可達的點的reach,又需要O(n)】

?2.2 貪心

我們每次在可跳范圍內(nèi)選擇可以使得跳的更遠的位置。

如下圖,開始的位置是 2,可跳的范圍是橙色的。然后因為 3 可以跳的更遠,所以跳到 3 的位置。

?end=2,表示本輪最遠可以遍歷到下標2這個位置

max_pos=4,表示本輪遍歷的這些點,可以跳到的最遠的位置是4(也就是下一輪可以遍歷的最遠的位置)

step=1,表示到達本輪這些點,需要的跳數(shù)

?如下圖,然后現(xiàn)在的位置就是 3 了,能跳的范圍是橙色的,然后因為 4 可以跳的更遠,所以下次跳到 4 的位置。

?end=4,表示本輪最遠可以遍歷到下標4這個位置

max_pos=8,表示本輪遍歷的這些點,可以跳到的最遠的位置是8(也就是下一輪可以遍歷的最遠的位置,當然比最后一個點還要遠,所以就相當于到達最后一個點了)

step=2,表示到達本輪這些點,需要的跳數(shù)

class Solution:def jump(self, nums: List[int]) -> int:end=0 #當前能夠跳的邊界(上一輪算出來的,上一輪可以跳到的最遠的點)max_pos=0 #這一輪可以跳到的最遠的點,作為下一輪可以考慮的點的最遠邊界step=0# 到達當前遍歷的點,需要幾跳for i in range(len(nums)-1):#循環(huán)不用考慮最后一個點,首先是最后一個點肯定可達;其次是如果正好上一輪的end是最后一個點,那么遍歷到最后一個點的時候,step還需要+1,那么結(jié)果就不對了max_pos=max(max_pos,i+nums[i])#這一輪可以到達的這些點中,可以跳到的最遠的點if(i==end):#如果到達了這一輪可以到達的最遠的點(此時已經(jīng)考慮完本輪遍歷的點可以跳到的最遠的點了)end=max_pos#將這一輪可以跳到的最遠的點賦值給下一輪的邊界(下一輪可以遍歷的u資源的點)step+=1#之后的點,到達他們需要的跳數(shù)+1return(step)

時間復(fù)雜度O(n)

總結(jié)

以上是生活随笔為你收集整理的文巾解题 45. 跳跃游戏 II的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。