力扣面试经典算法150题:跳跃游戏 II

跳跃游戏 II

今天的题目是力扣面试经典150题中的数组的中等难度题:跳跃游戏II。

题目链接:https://leetcode.cn/problems/jump-game-ii/description/?envType=study-plan-v2&envId=top-interview-150

题目描述

给定一个非负整数数组 nums,你最初位于数组的第一个位置。每个元素代表你在该位置可以跳跃的最大长度。你的目标是从数组的起始位置到达最后一个位置。求出到达最后一个位置所需的最少跳跃次数。

  • 示例
    • 输入:
      nums = 2,3,1,1,4
    • 输出:
      2
  • 示例 :
    • 输入:
      nums = 2,3,0,1,4
    • 输出:
      2

题目分析

昨天刚做完跳跃游戏的题目,昨天的题目只需要返回能否到终点即可,今天题目难度高一点,我们需要返回最少的次数,但是这个游戏的本质还是一样的。

解题思路

这个题目闭眼贪心算法,昨天刚解完,今天总不能忘了吧。

  1. 初始化三个变量:step 表示当前步数,maxReach 表示当前可以达到的最远位置,end 表示上一步可以达到的最远位置。
  2. 遍历数组,更新 maxReach。
  3. 当遍历到 end 时,增加步数,并更新 end 为新的 maxReach。
  4. 继续遍历直到结束。

实际算法代码

以下是使用上述思路的 Java 实现:

java 复制代码
public class Solution {

    public static void main(String[] args) {
        Solution solution = new Solution();
        int[] nums = {2, 3, 1, 1, 4};
        int minJumps = solution.jump(nums);
        System.out.println("Minimum jumps: " + minJumps);
    }


    public int jump(int[] nums) {
        int step = 0;
        int maxReach = 0;
        int end = 0;
        for (int i = 0; i < nums.length - 1; i++) {
            maxReach = Math.max(maxReach, i + nums[i]);
            if (i == end) {
                step++;
                end = maxReach;
                if (end >= nums.length - 1) break;
            }
        }
        return step;
    }
}

可以看到,实际计算的代码比昨天也没多什么东西,就一个计算结果的步数,到结尾返回。只要题目理解的没问题,熟练使用贪心算法,解答还是很简单的。

结果

运行代码,测试通过:

提交到力扣,也正常通过:

总结

又是使用贪心算法的一天,已经连着解了好几个题了。

其实主要还是理解题目,掌握规律,使用恰当的代码编写,从暴力解法慢慢过渡到优秀解法,算法之力就是这么积累的。

加油!!!

相关推荐
青 春 记 忆3 小时前
LeetCode 21. 合并两个有序链表|Python 解法详解
python·算法·leetcode·链表
Sagittarius_A*5 小时前
后量子密码|通识认知 03|量子威胁辟谣:Grover 算法对对称密码的影响与误区
算法·信息安全·密码学·量子计算·pqc·后量子密码
Patrick在香港6 小时前
Python Docker镜像从1.2GB到89MB:多阶段构建的完整优化实录
java·python·docker·信息可视化·容器·数据分析·ai编程
上海安当技术6 小时前
敏感数据怎么防拖库?信封加密(DEK+KEK 二层密钥)架构设计与 Java 实战
java·开发语言·python
我是唐青枫6 小时前
Java JCommander 实战详解:用注解解析命令行参数
java·开发语言
大鹏说大话6 小时前
C++ 内存布局详解:类、虚函数、虚表底层原理
java·开发语言
还是鼠鼠7 小时前
Spring AI连接DeepSeek与通义千问:application.yaml配置详解
java·通义千问·spring ai·deepseek
QAQo7T7 小时前
Python组蓝桥杯备赛超详细知识点总结笔记_排序算法篇
笔记·python·算法·蓝桥杯·排序算法
千里之行,始于足下sanhai7 小时前
P8686 [蓝桥杯 2019 省 A] 修改数组 - 数字魔法大冒险 题解
c++·算法·动态规划
小星星闪亮登场7 小时前
Codeforces Round 1115 ( Div. 2)
数据结构·c++·算法·贪心算法·排序算法·codeforces