給定一系列非負整數, 每個值代表從此下標可以向前跳躍的最遠距離, 試求出跳躍到數組尾端需要的最少步驟.
如給定 [2,3,1,1,4], 返回2. (從下標0跳到1, 從1跳到下標4).
算法描述: 貪心算法, 從頭開始遍歷數組, 記錄通過ret+1步能夠到達的最遠下標爲curr, 記錄通過ret步能夠到達的最遠下標爲last, 當遍歷到的下標i大於上一次能夠到達的最遠下標last時, 更新last爲curr, 並對ret加1, 數組遍歷完成後返回ret.
代碼:
1 class Solution {
2 public:
3 int jump(int A[], int n) {
4 int last = 0;
5 int curr = 0;
6 int ret = 0;
7 for (int i = 0; i < n; i++) {
8 if (i > last) {
9 if (last == curr && last < n - 1) return -1;
10 last = curr;
11 ret++;
12 }
13 curr = max(curr, i + A[i]);
14 }
15 return ret;
16 }
17 };