lintcode117 跳躍遊戲 II

2021-08-20 05:42:10 字數 1033 閱讀 3886

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

你的目標是使用最少的跳躍次數到達陣列的最後乙個位置。

,最少到達陣列最後乙個位置的跳躍次數是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 注意事項 這個問題有兩個方法,乙個是貪心和 動態...