給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。
陣列中的每個元素代表你在那個位置可以跳躍的最大長度。
判斷你是否能到達陣列的最後乙個位置。
注意事項
這個問題有兩個方法,乙個是貪心
和動態規劃
。
貪心
方法時間複雜度為o(n)
。
動態規劃
方法的時間複雜度為為o(n^2)
。
我們手動設定小型資料集,使大家可以通過測試的兩種方式。這僅僅是為了讓大家學會如何使用動態規劃的方式解決此問題。如果您用動態規劃的方式完成它,你可以嘗試貪心法,以使其再次通過一次。
樣例
a =[2,3,1,1,4],返回 true.
a =[3,2,1,0,4],返回 false.
乙個很典型的動態規劃問題
把這個陣列看作一排點
如果能從x點跳到y點,那麼就連線這兩個點
這樣我們就構建了乙個dag
令f(n)表示為我們是否能到達n點
dag(v, e)
init f(1..n)=false
for(1...n)
f(i)=true iff f(j)=true & (j,i) in e;
那麼對於這個題來說,我們可以用乙個和a大小一樣的vector(bool)來記錄我們是否能到達某個點。
1bool canjump(vector &a) 10}
1112
for(int i=0;i1;i++)16}
1718
return
true
;19 }
同時,如果用貪心演算法的話
遍歷陣列,對於每乙個位置,計算出當前所能到的最遠距離,並把當前距離與目前所能到的最遠距離進行比較
1bool canjump(vector &a)
9return
true
; 10 }
lintcode116 跳躍遊戲 深度搜尋
給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。樣例 樣例 1 輸入 2 3,1 1,4 輸出 true 樣例 2 輸入 3 2,1 0,4 輸出 false 注意事項 這個問題有兩個方法,乙個是貪心和 動態...
116 跳躍遊戲 存在型動態規劃
中文english 給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。樣例 1 輸入 2,3,1,1,4 輸出 true樣例 2 輸入 3,2,1,0,4 輸出 false 這個問題有兩個方法,乙個是貪心和動態...
兩次過 Lintcode 116 跳躍遊戲
給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。a 2,3,1,1,4 返回 true.a 3,2,1,0,4 返回 false.這個問題有兩個方法,乙個是貪心和動態規劃。貪心方法時間複雜度為o n 動態規劃...