题目

类型:动态规划

难度:中等

跳跃游戏 II - 图1

解题思路

1、这道题是典型的贪心算法,通过局部最优解得到全局最优解。

2、维护当前能够到达的最大下标位置,记为边界。我们从左到右遍历数组,到达边界时,更新边界并将跳跃次数增加 1。

3、在遍历数组时,不访问最后一个元素,因为在访问最后一个元素之前,边界一定大于等于最后一个位置,否则就无法跳到最后一个位置了。

跳跃游戏 II - 图2

代码

  1. class Solution {
  2. public int jump(int[] nums) {
  3. int length = nums.length;
  4. int end = 0;
  5. int maxPosition = 0;
  6. int steps = 0;
  7. for (int i = 0; i < length - 1; i++) {
  8. maxPosition = Math.max(maxPosition, i + nums[i]);
  9. if (i == end) {
  10. end = maxPosition;
  11. steps++;
  12. }
  13. }
  14. return steps;
  15. }
  16. }