【leetcode面试经典150题】-45. 跳跃游戏 II

【leetcode面试经典150题】-45. 跳跃游戏 II


1 题目介绍

给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。

每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i + j] 处:

  • 0 <= j <= nums[i]
  • i + j < n

返回到达 nums[n - 1] 的最小跳跃次数。生成的测试用例可以到达 nums[n - 1]。

在这里插入图片描述

2 个人解题思路

打算正向贪心遍历,找到当前步数中的下一步最远的maxPosition,如果当前位置和end边界位置重合,那么就把最远端设置为当前的边界,也就代表移动了一次且最远。否则依次遍历,遍历找出每个的maxPosition。

2.1 代码

class Solution {
    public int jump(int[] nums) {
        int length = nums.length;
        int end = 0;
        int maxPosition = 0; 
        int steps = 0;
        for (int i = 0; i < length - 1; i++) {
            maxPosition = Math.max(maxPosition, i + nums[i]); 
            if (i == end) {
                end = maxPosition;
                steps++;
            }
        }
        return steps;
    }
}

3 官方题解

和官方的第二种思路差不多,学一下第一种思路。
方法一:反向查找出发位置
我们的目标是到达数组的最后一个位置,因此我们可以考虑最后一步跳跃前所在的位置,该位置通过跳跃能够到达最后一个位置。
如果有多个位置通过跳跃都能够到达最后一个位置,那么我们应该如何进行选择呢?直观上来看,我们可以「贪心」地选择距离最后一个位置最远的那个位置,也就是对应下标最小的那个位置。因此,我们可以从左到右遍历数组,选择第一个满足要求的位置。
找到最后一步跳跃前所在的位置之后,我们继续贪心地寻找倒数第二步跳跃前所在的位置,以此类推,直到找到数组的开始位置。

3.1 代码

class Solution {
    public int jump(int[] nums) {
        int position = nums.length - 1;
        int steps = 0;
        while (position > 0) {
            for (int i = 0; i < position; i++) {
                if (i + nums[i] >= position) {
                    position = i;
                    steps++;
                    break;
                }
            }
        }
        return steps;
    }
}

相关推荐

  1. LeetCode 面试经典150 45.跳跃游戏II

    2024-06-07 08:18:08       39 阅读
  2. leetcode面试经典15010.跳跃游戏 II(C++)

    2024-06-07 08:18:08       41 阅读
  3. 【力扣经典面试45. 跳跃游戏 II

    2024-06-07 08:18:08       54 阅读
  4. LeetCode-热10045. 跳跃游戏 II

    2024-06-07 08:18:08       39 阅读
  5. LeetCode10045. 跳跃游戏 II(贪心)

    2024-06-07 08:18:08       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 08:18:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 08:18:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 08:18:08       82 阅读
  4. Python语言-面向对象

    2024-06-07 08:18:08       91 阅读

热门阅读

  1. 嵌入式笔试面试刷题(day17)

    2024-06-07 08:18:08       18 阅读
  2. PHP Standards Recommendations(PSR)

    2024-06-07 08:18:08       30 阅读
  3. leetcode 2938.区分白球与黑球

    2024-06-07 08:18:08       29 阅读
  4. 【随手记】maplotlib.use函数设置图像的呈现方式

    2024-06-07 08:18:08       32 阅读
  5. 基于springboot的公交线路查询系统源码数据库

    2024-06-07 08:18:08       23 阅读
  6. 力扣算法题:跳跃游戏 -- 多语言实现

    2024-06-07 08:18:08       26 阅读
  7. 大数据技术Hbase列数据库——topic2

    2024-06-07 08:18:08       31 阅读
  8. 弹球大挑战:Python与Pygame的互动游戏教程

    2024-06-07 08:18:08       33 阅读