陣列中的每個元素代表你在那個位置可以跳躍的最大長度。
你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。
,最少到達陣列最後乙個位置的跳躍次數是2(從陣列下標0跳一步到陣列下標1,然後跳3步到陣列的最後乙個位置,一共跳躍2次)
思路:
1. 動態規劃
o(n^2)
如果當前位置i可由j位置到達,那麼i位置的跳躍次數就是j位置的跳躍次數+1;
temp(i) = temp(j)+1 if j+a[j]>=i &j位置的最小跳躍次數已經求得過。
**:
public int jump(int a)
for (int i = 1; i < a.length; i++) }}
return temp[a.length-1];
}
2.貪心演算法
從左往右掃瞄,維護乙個覆蓋區間,每掃過乙個元素,就重新計算覆蓋區間的邊界。比如,開始時區間[start, end], 遍歷a陣列的過程中,不斷計算a[i]+i最大值(即從i座標開始最大的覆蓋座標),並設定這個最大覆蓋座標為新的end邊界。而新的start邊界則為原end+1。不斷迴圈,直到end> n.
// solution 2: one pass greedy.
public int jump(int a)
// bug:
/*input: [1]
output: 1
expected: 0
*/if (a.length == 1)
int len = a.length;
int start = 0;
int end = 0;
int steps = 0;
while (end < len - 1)
}start = end + 1;
end = max;
if (start > end)
}return integer.max_value;
}
LintCode 跳躍遊戲 I VS跳躍遊戲 II
陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。分析 方法一 基於動態規劃的做法,時間複雜度o n 2 陣列dp i 表示能否到達下標為i的位置,對於從下標i 1開始的每乙個位置,都從下標j 0開始到i 1判斷能否到達j,並且判斷從j開始最遠能否跳到或超過i的...
lintcode 跳躍遊戲 II
跳躍遊戲 ii 給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。樣例 給出陣列a 2,3,1,1,4 最少到達陣列最後乙個位置的跳躍次數是2 從陣列下標0跳一步到陣列下標1,然後跳3步到陣列的...
lintcode116 跳躍遊戲 深度搜尋
給出乙個非負整數陣列,你最初定位在陣列的第乙個位置。陣列中的每個元素代表你在那個位置可以跳躍的最大長度。判斷你是否能到達陣列的最後乙個位置。樣例 樣例 1 輸入 2 3,1 1,4 輸出 true 樣例 2 輸入 3 2,1 0,4 輸出 false 注意事項 這個問題有兩個方法,乙個是貪心和 動態...