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

 

你可能感兴趣的:(LeetCode)