[LeetCode系列] 跳躍問題II

給定一系列非負整數, 每個值代表從此下標可以向前跳躍的最遠距離, 試求出跳躍到數組尾端需要的最少步驟.

如給定 [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 };

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章