55 跳躍遊戲(bfs)

2021-10-04 19:53:33 字數 1146 閱讀 9299

1. 問題描述:

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

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

判斷你是否能夠到達最後乙個位置。

示例 1:

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

輸出: true

解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後乙個位置。

示例 2:

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

輸出: false

解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後乙個位置。

2. 思路分析:

① 讀完題之後可以發現這個道題目的本質是bfs,其中典型的特點是從原狀態到目標狀態的所需要的最少步驟,只是這裡改變了一下問題求解的東西,求解的是能否到達最後的目標狀態,但是本質上求解的是乙個東西,典型的bfs題目,可以來說比較簡單,使用bfs的常規操作加上題目的要求即可完成

② bfs典型的解決是使用乙個佇列,我們可以建立乙個內部類來表示當前的節點,節點需要乙個屬性表示當前節點的位置,佇列的資料型別為當前的節點型別,因為這裡只是涉及到了當前節點的位置所以也可以將queue佇列的元素資料型別為integer,只是之前使用bfs的時候習慣使用了內部類,將開始節點加入到佇列中,當佇列非空的時候執行迴圈,在迴圈一開始彈出佇列的元素,在for迴圈中判斷當前位置能否能夠到達在其後面的位置,假如能夠到達其他的位置將這個節點加入到佇列中並且將該位置的標記陣列對應的位置賦值為1,標記陣列主要是為了重複訪問之前已經訪問過的位置,因為假如之前能夠到達這個位置說明這個之前這個方案的路徑是最短的,之後也到達這個位置但是已經被標記了說明不是最短的

③ 在迴圈一開始彈出節點的時候判斷當前元素的位置是否是陣列長度減1,假如是說明能夠到達,對於這種bfs題目做多了自然會形成條件反射,因為題目中蘊含著非常明顯使用bfs解決的乙個特點,然後結合bfs的套路和題目的要求就可以輕鬆解決了

3. **如下:

class solution 

}public boolean canjump(int nums) }}

return false;

}}

55 跳躍遊戲

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

55 跳躍遊戲

動態規劃 f i 表示當前所能跳躍到的最大索引 class solution def canjump self,nums list int bool if len nums 1 return true 當前所能跳躍到的最遠索引 maxindex 0for i in range len nums 1 ...

55 跳躍遊戲

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