[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 };

 

posted @ 2014-09-15 10:10  Lancelod_Liu  阅读(414)  评论(0编辑  收藏  举报