題目:跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。
陣列中的每個元素代表你在該位置可以跳躍的最大長度。
判斷你是否可以到達最後的位置。
示例:
輸入: [2,3,1,1,4]
輸出: true
解釋: 我們可以先跳 1 步,從位置 0 到達 位置 1, 然後再從位置 1 跳 3 步到達最後乙個位置。
answer1
本程式執行思路:
if
(position == nums.length -1)
if
(canjumpposition
(nextpostion,nums)
)
code
class
solution
public
boolean
canjumpfrompostion
(int postion,
int nums)
int furthestjump = math.
min(postion + nums[postion]
,nums.length -1)
;for
(int nextpositon = position +
1; nextposition <= furthjump;nextpostion++)}
return
false;}
}
answer2:自頂向下的動態規劃
優化回溯演算法
利用乙個記錄陣列memo進行記錄,優化遞迴。
步驟
code
enum index
public
class
solution
int furthestjump = math.
min(position + nums[position]
,nums.length-1)
;for
(int nextposition = position +
1; nextposition <= furthestjump;nextposition++)}
memo[position]
= index.bad;
return
false;}
public
boolean
canjump
(int
nums)
memo[memo.length-1]
= index.good;
return
canjumpfromposition(0
,nums);}
}
answer3:自底向上的動態規劃
自底向上和自頂向下動態規劃的區別就是消除了回溯,在實際使用中,自底向上的方法有更好時間效率。我們從右邊開始動態規劃,每次查詢右邊節點的資訊,都是已經計算過的,不再需要額外的遞迴開銷。
code
enum index
public
class
solution
memo[memo.length -1]
= index.good;
for(
int i=numslength -
2;i>=
0;i--)}
}return memo[0]
== index.good;
}}
LeetCode 跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 從位置 0 到 1 跳 1 步,然後跳 3 步到達最後乙個位置。示例 2 輸入 3,2,1,0,4 輸出 fa...
leetcode 跳躍遊戲
給定乙個非負整數陣列,你最初位於陣列的第乙個位置。陣列中的每個元素代表你在該位置可以跳躍的最大長度。判斷你是否能夠到達最後乙個位置。示例 1 輸入 2,3,1,1,4 輸出 true 解釋 我們可以先跳 1 步,從位置 0 到達 位置 1,然後再從位置 1 跳 3 步到達最後乙個位置。示例二 輸入 ...
leetcode跳躍遊戲
1.從後往前遍歷 設陣列長度len a.size 該題判斷能否到達最後乙個位置即len 1。1 開始時,設目標點為len 1,從倒數第二個元素開始往前遍歷,即從len 2,當前元素到目標點的距離為n,初始為n 1,因為倒數第二個到倒數第乙個只需要一步,2 判斷a len 2 的值是否大於n,如果大於...