leetcode 1345 跳躍遊戲 IV

2021-10-24 01:13:25 字數 2161 閱讀 3479

給你乙個整數陣列 arr ,你一開始在陣列的第乙個元素處(下標為 0)。

每一步,你可以從下標 i 跳到下標:

i + 1 滿足:i + 1 < arr.length

i - 1 滿足:i - 1 >= 0

j 滿足:arr[i] == arr[j] 且 i != j

請你返回到達陣列最後乙個元素的下標處所需的最少操作次數 。

注意:任何時候你都不能跳到陣列外面。

示例 1:

輸入:arr = [100,-23,-23,404,100,23,23,23,3,404]

輸出:3

解釋:那你需要跳躍 3 次,下標依次為 0 --> 4 --> 3 --> 9 。下標 9 為陣列的最後乙個元素的下標。

示例 2:

輸入:arr = [7]

輸出:0

解釋:一開始就在最後乙個元素處,所以你不需要跳躍。

示例 3:

輸入:arr = [7,6,9,6,9,6,9,7]

輸出:1

解釋:你可以直接從下標 0 處跳到下標 7 處,也就是陣列的最後乙個元素處。

示例 4:

輸入:arr = [6,1,9]

輸出:2

示例 5:

輸入:arr = [11,22,7,7,7,7,7,7,7,22,13]

輸出:3

1 <= arr.length <= 5 * 10^4

-10^8 <= arr[i] <= 10^8

可以把這道題看作是無向圖中求最短路徑的問題,用bfs,每次在佇列中加入從當前節點能跳到的其他節點,及跳躍次數。第乙個跳到結尾的,就是跳躍次數最短的方案。

優化點:首先做出來節點值和索引的倒排索引,方便同值跳躍。其次記錄已經訪問過的節點,避免走重複的路。時間複雜度是o(n

)o(n)

o(n)

用python沒法過最後1個用例……python連104

10^4

104都不行???

看了別人的優化,再把陣列中連續的、相同的部分合併掉即可。

另外發現一點,bfs不太方便用遞迴寫啊……

class

solution

:def

minjumps

(self, arr: list[

int])-

>

int:

dedup_arr = arr[:2

]for each_num in arr[2:

]:if each_num == dedup_arr[-1

]and each_num == dedup_arr[-2

]:continue

arr = dedup_arr

jump_dict =

for index, num in

enumerate

(arr)

:if num not

in jump_dict:

jump_dict[num]=[

] jump_dict[num]

queue = collections.deque([(

0,0)

])visited_index =

set(

)while queue:

index, cnt = queue.popleft(

)if index not

in visited_index:

if index ==

len(arr)-1

:return cnt

if index -

1>=0:

(index -

1, cnt +1)

)if index +

1<

len(arr)

:(index +

1, cnt +1)

)for j in jump_dict[arr[index]]:

(j, cnt +1)

) visited_index.add(index)

1345 跳躍遊戲 IV

給你乙個整數陣列 arr 你一開始在陣列的第乙個元素處 下標為 0 每一步,你可以從下標 i 跳到下標 i 1 滿足 i 1 arr.length i 1 滿足 i 1 0 j 滿足 arr i arr j 且 i j 請你返回到達陣列最後乙個元素的下標處所需的 最少操作次數 注意 任何時候你都不能...

python lintcode116 跳躍遊戲

給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。這個問題有兩個方法,乙個是貪心和動態規劃。貪心方法時間複雜度為o n 動態規劃方法的時間複雜度為為o n 2 我們手動設定小型資料集,使大家可以通過測試的兩種方...

LeetCode 跳躍遊戲

給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 輸出 fa...