給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否能夠到達最後乙個位置。
示例 1:
輸入: [2,3,1,1,4]
輸出: true
解釋: 從位置 0 到 1 跳 1 步, 然後跳 3 步到達最後乙個位置。
示例 2:
輸入: [3,2,1,0,4]
輸出: false
解釋: 無論怎樣,你總會到達索引為 3 的位置。但該位置的最大跳躍長度是 0 , 所以你永遠不可能到達最後乙個位置。
兩種方法貪心演算法和動態規劃
1.貪心演算法**如下:(我也不太理解,希望誰可以補充的更仔細)
public canjump(int a)
return end>=a.lemgth-1;
}
2.動態規劃**如下:
說實話,自己的動態規劃還是很弱,有待加強!
動態規劃的思路相對來說要複雜一下,我們這裡分兩種情況來討論
第一步,定義乙個dp一維陣列,用來記錄每個位置是否能夠達到終點。比如,dp[i],表示在i位置,是否能夠跳到終點,如果能,為true;反之為false。
第二步,dp[i]是否能夠跳到終點,這裡主要分為兩種情況:
1.如果當前位置可以直接跳到終點,也就是說i + a[i] >= a.length() - 1,那麼直接讓dp[i] 為true就行了。
2.如果當前位置不能直接跳到終點,但是可以借助其他位置跳到終點,那麼dp[i]也為true。這裡設定為true有兩個條件,假設它借助j位置,首先dp[j]必須true,其次它必須能夠跳到j位置,也就是說i + dp[i] >= j。
經過簡單的分析,應該能夠理解到這個解法的思路吧!!!
class solution
else
for (int j = i; j < a.length - 1; j++) }}
return dp[0];
}}
lettcode
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。
輸入: [2,3,1,1,4]
輸出: 2
解釋: 跳到最後乙個位置的最小跳躍數是 2。
從下標為 0 跳到下標為 1 的位置,跳 1 步,然後跳 3 步到達陣列的最後乙個位置。
2 跳躍遊戲 c
有一段直線距離,這段距離上分布著 n 個 格仔 每個位置上都標有數字,表示可以從這個格仔往前最多跳躍幾格 最少跳幾步,可以從起點跳到終點?如上圖就是需要從a點跳到c點 在a點,可以往前最多跳2格,也就是在a點 可以往前跳一格或者兩格 b點就可以看成乙個坑,像上圖這個例子中,這個坑就是沒辦法逾越的,所...
跳躍遊戲2 計蒜課
給定乙個非負整數陣列,假定你的初始位置為陣列第乙個下標。陣列中的每個元素代表你在那個位置能夠跳躍的最大長度。你的目標是到達最後乙個下標,並且使用最少的跳躍次數。例如 a 2,3,1,1,4 a 2,3 1,1 4 到達最後乙個下標的最少跳躍次數為 2 2。先跳躍 1 1 步,從下標 0 0 到 1 ...
LeetCoda 45 跳躍遊戲2
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。示例 輸入 2,3,1,1,4 輸出 2 解釋 跳到最後乙個位置的最小跳躍數是 2。從下標為 0 跳到下標為 1 的位置,跳1步,然後跳 3步到達陣...