如何在华为OD机试中获得满分?Java实现【跳跃游戏 II】一文详解!

news2025/4/5 5:49:12

请添加图片描述

✅创作者:陈书予
🎉个人主页:陈书予的个人主页
🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区
🌟专栏地址: Java华为OD机试真题(2022&2023)

文章目录

  • 1. 题目描述
    • 2. 输入描述
    • 3. 输出描述
    • 4. 解释
    • 4. Java算法源码
    • 5. 测试
    • 6.解题思路

1. 题目描述

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

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

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

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

2. 输入描述

nums = [2,3,1,1,4]

3. 输出描述

2

4. 解释

  • 跳到最后一个位置的最小跳跃数是 2。
  • 从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

4. Java算法源码

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String input = sc.nextLine();
        String[] numsStr = input.split(", ");
        int[] nums = new int[numsStr.length];

        for (int i = 0; i < numsStr.length; i++) {
            String num = numsStr[i].replaceAll("[^\\d-]", "");
            nums[i] = Integer.parseInt(num);
        }

        int minJumps = jump(nums);
        System.out.println(minJumps);
    }

    public static int jump(int[] nums) {
        int n = nums.length;
        int[] dp = new int[n];
        dp[0] = 0;

        for (int i = 1; i < n; i++) {
            dp[i] = Integer.MAX_VALUE;

            for (int j = 0; j < i; j++) {
                if (j + nums[j] >= i) {
                    dp[i] = Math.min(dp[i], dp[j] + 1);
                    if (dp[i] == 2) 
                        break;
                }
            }
        }

        return dp[n - 1];
    }

在这里插入图片描述

5. 测试

示例输入示例输出
" 2,3,1,1,4 "2
" 2,3,0,1,4 "2

6.解题思路

在这里插入图片描述

  1. 创建一个数组 dp,其中 dp[i] 表示到达索引 i 的最小跳跃次数。
  2. 初始化 dp 数组,将所有元素初始化为一个较大的数,除了 dp[0],它被初始化为 0,表示初始位置不需要跳跃。
  3. 遍历数组,从索引 1 开始,更新每个位置的最小跳跃次数:
    • 对于索引 i,遍历索引范围 j,其中 j < i。如果从索引 j 可以跳跃到索引 i(即 j + nums[j] >= i),则更新 dp[i] 为 dp[j] + 1。
    • 在更新 dp[i] 时,可以添加一个优化:如果 dp[i] 的值已经为 2,即已经找到了一条跳跃次数为 2 的路径,就可以提前结束内层循环,因为我们只需要找到最小的跳跃次数。
  4. 返回 dp 数组的最后一个元素 dp[n-1],即到达最后一个位置的最小跳跃次数。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/567986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MyBatis中discriminator鉴别器如何使用?你若不会,我手把手教你 | 超级详细,建议收藏

1. 前言 不知道大家在平时有没有手写sql的习惯&#xff0c;当还没有开源mybatis-plus时&#xff0c;手写sql那是非常的常见&#xff0c;但是在维护一个老项目的时候&#xff0c;竟然勾起了我的一丝回忆。涉及到一个需求&#xff0c;我要追溯到它sql语句上&#xff0c;发现了一个…

【PC迁移与管理】上海道宁为每个用户和每个 PC 传输和迁移场景提供解决方案——PCmover

PCmover 是一款 可以自动将所有选定文件、 文件夹、设置、用户配置文件 甚至应用程序 从旧PC传输、恢复和升级到 新PC或操作系统的软件 而且由于 大多数迁移的应用程序 都已安装在新PC上即可使用 通常无需查找旧CD 以前下载的程序 序列号或许可证代码 开发商介绍 La…

mongodb-分片集群-搭建

分片集群 高数据量和吞吐量的数据库应用会对单机的性能造成较大压力,大的查询量会将单机的CPU耗尽,大的数据量对单机的存储压力较大,最终会耗尽系统的内存而将压力转移到磁盘IO上。 为了解决这些问题,有两个基本的方法: 垂直扩展和水平扩展。 垂直扩展&#xff1a;增加更多的…

嵌入式 QT 基于mplayer的音乐播放器

1、实现功能 2、音乐播放界面 2.1 界面程序 2.1.1 界面控制初始化 2.1.2 控件风格程序 3、 歌曲列表界面 3.1.1 在 widget.h 定义 QListWidge 对象指针 3.1.2 在 memberInit 函数中添加 QlistWidge 初始化 3.1.3 在 setMusicPlayStyle 函数中设置其风格 4、音乐播放功…

第四章 程序的控制结构

文章目录 第四章 程序的控制结构4.1 程序的三种控制结构4.1.1 程序流程图4.1.2 程序控制结构基础4.1.3 程序控制结构扩展 4.2 程序的多分支结构4.2.1 单分支结构&#xff1a;if4.2.2 二分支结构&#xff1a;if-else4.2.3 多分支结构&#xff1a;if-elif-else4.2.4 判断条件及组…

Github Copilot AI配对开发者编程,提升项目建设进度

Github Copilot是什么&#xff1f; GitHub Copilot 是结对编程的虚拟版本。结对编程是一种常见的敏捷软件开发技术 —— 即两个开发人员在同一个项目上并肩协作&#xff0c;轮流编写代码并检查合作伙伴的输出。 Copilot 可以支持十几种语言&#xff0c;与 Python、JavaScript、…

一文揭秘高效稳定的 Apache Doris 内存管理机制

作者&#xff1a;SelectDB 高级研发工程师、Apache Doris Committer 邹新一 背景 Apache Doris 作为基于 MPP 架构的 OLAP 数据库&#xff0c;数据从磁盘加载到内存后&#xff0c;会在算子间流式传递并计算&#xff0c;在内存中存储计算的中间结果&#xff0c;这种方式减少了频…

Vue2创建脚手架小案例

Vue CLI是一个官方提供的命令行工具&#xff0c;用于快速创建Vue.js项目和管理项目依赖项。下面是使用Vue CLI创建Vue.js项目的基本步骤&#xff1a; 首先&#xff0c;确保已安装Node.js和npm包管理器。可以在终端输入以下命令来检查它们的版本&#xff1a; node -v npm -v如…

MySQL备份

MySQL的备份方式有哪几种&#xff1f;分别如何实现&#xff1f; 目录 一、数据的备份类型 1、数据的备份类型根据其自身的特性主要分为以下几组&#xff1a; 二、MySQL备份数据的方式 三、常见的备份工具 1、一般情况下, 我们需要备份的数据分为以下几种 2、备份工具 3…

【2023 · CANN训练营第一季】昇腾AI入门课(TensorFlow)第三章——AI应用开发

1.具备编程经验 本课程中的示例代码、练习涉及C&C语言、Python语言的如下基础知识&#xff0c;建议您在学习本课程前先学习这部分内容 1.C&C语言 a.变量、基本数据类型、指针、引用、const限定符等 b&#xff0c;字符串和数组 c.表达式&#xff0c;包括赋值运算、条件…

回收站中怎么找回误删除的文件?这几种方法很实用

当我们在电脑上操作文件的时候&#xff0c;难免会有不小心删除文件的情况发生。这个时候&#xff0c;我们可以打开回收站来找回误删除的文件。但是&#xff0c;有时候我们也会误将回收站清空。那么&#xff0c;该怎样才能找回已经误删除的文件呢&#xff1f;在这里提供了回收站…

免费搭建个人stable-diffusion绘画(干货教程)

目前AI绘画主流的模型有Midjourney、Stable Diffusion、DALLE&#xff0c;最火的当属Midjorney和Stable Diffusion&#xff0c;但是由于Midjourney没有开源且要付费&#xff0c;我今天主要分享Stable Diffusion的部署和使用方法的分享。 大家应该面对的一个不可避免的问题&…

kubernetes-informer机制

一、概念 informer 是 client-go 中的核心工具包&#xff0c;在kubernetes中&#xff0c;各个组件通过HTTP协议跟 API Server 进行通信。如果各组件每次都直接和API Server 进行交互&#xff0c;会给API Server 和ETCD造成非常大的压力。在不依赖任何中间件的情况下&#xff0…

Git简单使用介绍

Git作用 版本控制&#xff08;版本迭代&#xff09;&#xff0c;多人开发&#xff0c;没有版本控制&#xff0c;每修改一下文件就需要备份 常用的版本控制器&#xff1a;Git 和SVN 主要区别&#xff1a; SVN是集中式版本控制系统&#xff0c;版本库是集中放在中央服务器的&a…

半导体芯片划片机怎么使用

使用半导体芯片划片机的方法如下&#xff1a; 准备工作&#xff1a;清洁设备&#xff0c;核对晶圆数量和批次信息&#xff0c;确保晶圆完好无破损。 粘贴晶圆片&#xff1a;将待切割的晶圆片粘贴到蓝膜上&#xff0c;并将蓝膜框架放入划片机。 划片开始&#xff1a;实时清除划…

想劝大家别去外包,干了5年,彻底废了......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近5年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落&#xff01; 而我已经在一个企业干了四…

什么是SQL Server 审核

IT 安全专业人员需要定期监视和审核 SQL Server 中的所有活动&#xff0c;以确保关键数据的完整性和机密性不会受到损害。手动监视服务器上的所有这些活动是一个忙碌的过程。为了使管理员的工作更轻松一些&#xff0c;Microsoft 提供了 SQL Server 审核功能来帮助管理员有效地审…

vue不同开发方式引用vue文件讲解

上面这个图是vue构建后dist目录的文件&#xff0c;这里面包含了各种开发环境所需要的vue文件 一、开发环境和生产环境 主要分为带有prod和不带prod的版本&#xff1b; 带有prod为生产环境版本并进行了代码压缩&#xff0c;没有运行中不会有警告、错误等详细的提示信息 不带pr…

《程序员面试金典(第6版)》面试题 02.07. 链表相交(查找节点操作,哈希表,双指针(先走n步法,交替遍历法))

题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 题目传输门&#xff1a;面试题 02.07. 链表相交 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结…

Python——openpyxl读取Excel表格(读取、单元格修改、单元格加底色)

首先python读取Excel的库有很多&#xff0c;包括xlwings&#xff0c;pandas&#xff0c;xlrd等等&#xff0c;我比较常用的是openpyxl&#xff0c;以及pandas&#xff0c;当然还有喜欢将数据量比较大的Excel转为csv格式再读取。 今天我们用openpyxl来读取excel文件&#xff0c…