[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 };
Showing off sucks.