跳跃游戏 II - 贪心算法解法
问题描述:
给定一个长度为 n 的 0 索引整数数组 nums,我们从数组的第一个元素 nums[0] 开始。每个元素 nums[i] 表示从索引 i 可以跳跃的最大长度,换句话说,从位置 i,你可以跳到位置 i + j,其中 0 <= j <= nums[i],且 i + j < n。
目标是返回到达数组最后一个元素 nums[n - 1] 的 最小跳跃次数。
示例:
示例 1:
输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。
示例 2:
输入: nums = [2,3,0,1,4]
输出: 2
思路分析:
这道题目可以使用 贪心算法 来解决。我们可以理解为:每一步选择跳跃到能够到达的最远位置,直到到达数组的最后一个元素。
解题关键点:
- 当前跳跃的最远距离:我们在遍历数组时,每次计算当前位置能够跳跃到的最远位置,并更新最远位置。
- 跳跃次数的增加:当遍历到当前位置的最远位置时,说明需要再进行一次跳跃。跳跃的次数会增加。
- 贪心选择:每次选择跳跃到当前能到达的最远位置,从而确保跳跃次数最少。
代码解析:
class Solution {public int jump(int[] nums) {int ans = 0; // 跳跃次数int cur = 0; // 当前跳跃范围的最远位置int next = 0; // 下一跳能够到达的最远位置// 遍历数组,直到倒数第二个元素(最后一个元素不需要再跳)for (int i = 0; i < nums.length - 1; i++) {next = Math.max(next, i + nums[i]); // 更新下一跳能到达的最远位置// 如果已经到达当前跳跃范围的最远位置,则需要增加跳跃次数if (i == cur) {cur = next; // 更新当前跳跃的最远位置ans++; // 跳跃次数增加}}return ans; // 返回跳跃次数}
}
详细讲解:
-
初始化变量:
ans: 记录跳跃次数,初始为 0。cur: 当前跳跃的最远位置,初始为 0(从数组的第一个位置开始)。next: 下一跳能够到达的最远位置,初始为 0。
-
遍历数组:
- 我们遍历数组的每个位置,计算从当前位置能跳到的最远位置。
next = Math.max(next, i + nums[i]):i + nums[i]表示从当前索引i能跳到的最远位置,我们不断更新next为当前能到达的最远位置。
-
判断是否需要增加跳跃次数:
if (i == cur): 当我们遍历到当前位置i时,如果i正好是当前跳跃的最远位置(即i == cur),说明我们已经走到了当前跳跃的边界,下一次需要跳跃。cur = next: 更新当前跳跃的最远位置为next。ans++: 跳跃次数增加。
-
最终结果:
- 遍历完成后,
ans就是从nums[0]跳到nums[n-1]所需的最小跳跃次数。
- 遍历完成后,
例子解析:
例子 1:nums = [2, 3, 1, 1, 4]
- 初始化:
ans = 0,cur = 0,next = 0 - 遍历开始:
- i = 0:从位置 0 可以跳到
0 + nums[0] = 0 + 2 = 2,所以next = 2。 - i == cur (i == 0):更新
cur = 2,跳跃次数ans = 1。 - i = 1:从位置 1 可以跳到
1 + nums[1] = 1 + 3 = 4,所以next = 4。 - i == cur (i == 2):更新
cur = 4,跳跃次数ans = 2。 - 跳到最后,跳跃次数为 2。
- i = 0:从位置 0 可以跳到
例子 2:nums = [2, 3, 0, 1, 4]
- 初始化:
ans = 0,cur = 0,next = 0 - 遍历开始:
- i = 0:从位置 0 可以跳到
0 + nums[0] = 0 + 2 = 2,所以next = 2。 - i == cur (i == 0):更新
cur = 2,跳跃次数ans = 1。 - i = 1:从位置 1 可以跳到
1 + nums[1] = 1 + 3 = 4,所以next = 4。 - i == cur (i == 2):更新
cur = 4,跳跃次数ans = 2。 - 跳到最后,跳跃次数为 2。
- i = 0:从位置 0 可以跳到
总结:
- 贪心思想:每次选择跳跃到当前能到达的最远位置,从而保证跳跃次数最少。
- 时间复杂度:O(n),其中
n是数组的长度。我们只遍历了一次数组。 - 空间复杂度:O(1),只使用了常数空间。
这就是 跳跃游戏 II 的贪心算法解法!
相关文章:
跳跃游戏 II - 贪心算法解法
问题描述: 给定一个长度为 n 的 0 索引整数数组 nums,我们从数组的第一个元素 nums[0] 开始。每个元素 nums[i] 表示从索引 i 可以跳跃的最大长度,换句话说,从位置 i,你可以跳到位置 i j,其中 0 < j &…...
图像质量评价指标-UCIQE-UIQM
一、评价指标UCIQE 在文章《An underwater color image quality evaluation metric》中,提到的了评价指标UCIQE(Underwater Colour Image Quality Evaluation),是一种无参考图像质量评价指标,主要用于评估水下图像的质…...
CentOS上安装WordPress
在CentOS上安装WordPress是一个相对直接的过程,可以通过多种方法完成,包括使用LAMP(Linux, Apache, MySQL, PHP)栈或使用更现代的LEMP(Linux, Nginx, MySQL, PHP)栈。 我选择的是(Linux, Nginx…...
Spring Boot 原理分析
spring-boot.version:2.4.3.RELEASE Spring Boot 依赖管理 spring-boot-starter-parent 配置文件管理 <resources> <resource> <directory>${basedir}/src/main/resources</directory> <filtering>true&l…...
Git 本地项目上传 GitHub 全指南(SSH Token 两种上传方式详细讲解)
前言:Git 与 GitHub 的区别与联系 在学习如何将本地项目上传到 GitHub 之前,先来弄清楚 Git 和 GitHub 的区别以及它们之间的联系。 对比项GitGitHub定义分布式版本控制系统(DVCS),用于本地和远程管理代码版本托管 G…...
jenkins服务启动-排错
服务状态为active (exited) 且进程不在 查看/etc/rc.d/init.d/jenkins配置 获取配置参数 [rootfy-jenkins-prod jenkins]# cat /etc/rc.d/init.d/jenkins | grep -v #JENKINS_WAR"/usr/lib/jenkins/jenkins.war" test -r "$JENKINS_WAR" || { echo "…...
CF 144A.Arrival of the General(Java实现)
题目分析 一个n个身高数据,问最高的到最前面,最矮的到最后面的最短交换次数 思路分析 首先,如果数据有重复项,例如示例二中,最矮的数据就是最后一个出现的数据位置,最高的数据就是最先出现的数据位置&…...
SAP-ABAP:SAP中REPORT程序和online程序的区别对比
在SAP中,REPORT程序和Online程序(通常指Dialog程序)是两种常见的ABAP程序类型,它们在用途、结构和用户交互方式上有显著区别。以下是它们的详细对比: 1. 用途 REPORT程序Online程序主要用于数据查询、报表生成和批量数…...
Java发展史
JavaEE的由来 语言的诞生 Java的前身是Oak语言,其目的是搞嵌入式开发开发智能面包机 叮~~~🍞🍞🍞 产品以失败告终 巅峰 网景公司需要网景浏览器打开网页,Oak->Java,进行前端开发(相关技…...
vue3--SVG图标的封装与使用
流程 终端输入- -安装下面这个包 npm install vite-plugin-svg-icons -Dvite.config.ts文件中引入 import {createSvgIconsPlugin} from vite-plugin-svg-iconsvite.config.ts文件中配置plugins选项 将下面代码 createSvgIconsPlugin({//用于指定包含 SVG 图标的文件夹路径…...
Datawhale Ollama教程笔记3
小白的看课思路: Ollama REST API 是什么? 想象一下,你有一个智能的“盒子”(Ollama),里面装了很多聪明的“小助手”(语言模型)。如果你想让这些“小助手”帮你完成一些任务&#…...
学习数据结构(10)栈和队列下+二叉树(堆)上
1.关于栈和队列的算法题 (1)用队列实现栈 解法一:(参考代码) 题目要求实现六个函数,分别是栈初始化,入栈,移除并返回栈顶元素,返回栈顶元素,判空࿰…...
洛谷 P3660 USACO17FEB Why Did the Cow Cross the Road III 题解
题意 有一个圆,圆周上按顺时针方向给出 2 n 2n 2n个点。第 i i i个点的颜色是 c o l o r i color_i colori,其中数据保证 1 ≤ c o l o r i ≤ n 1\le color_i\le n 1≤colori≤n,而且每种不同的颜色有且只有两个点。不存在位置重叠的点…...
【数据结构】(9) 优先级队列(堆)
一、优先级队列 优先级队列不同于队列,队列是先进先出,优先级队列是优先级最高的先出。一般有两种操作:返回最高优先级对象,添加一个新对象。 二、堆 2.1、什么是堆 堆也是一种数据结构,是一棵完全二叉树,…...
如何提升爬虫获取数据的准确性?
提升爬虫获取数据的准确性是确保数据分析和后续应用有效性的关键。以下是一些经过验证的方法和最佳实践,可以帮助提高爬虫数据的准确性: 1. 数据清洗 数据清洗是提升数据准确性的重要步骤,主要包括去除重复数据、处理缺失值和异常值。 去除…...
Obsidian及Zotero常用的插件
Obsidian插件 Minimal Theme Settings(Life,zotero)【必需】 界面样式设置所需插件 Style Settings(Life,zotero)【必需】界面样式设置所需插件 Recent Files(Life,zotero…...
闲鱼IP属地是通过电话号码吗?
在闲鱼这样的二手交易平台上,用户的IP属地信息对于维护交易安全、增强用户间的信任至关重要。然而,关于闲鱼IP属地是如何确定的,不少用户存在疑惑,尤其是它与电话号码之间是否存在关联。本文将深入探讨这一问题,揭示闲…...
C#多线程异步连接MySQL与SQLserver数据库
C#多线程异步连接MySQL与SQLserver数据库 一、前言二、多线程异步连接数据库代码2.1代码块2.2代码说明 参考文档 一、前言 当编写代码连接多台设备上的数据库时,如果采用同步逐个连接的方式,在网络畅通的情况下连接速度尚可,但当其中一台设备…...
51单片机-数码管
目录 1、静态数码管 1.1、数码管是如何显示出字符 1.2、数码管静态显示原理 1.3、74HC573芯片的使用 1.4、静态数码管编程 2、动态数码管 2.1、数码管动态显示原理 2.2、74HC138芯片的使用 2.3、编写动态数码管程序 1、静态数码管 1.1、数码管是如何显示出字符 单片机…...
C#学习之S参数读取(s2p文件)
目录 一、创作灵感 二、S2PFileReader类 1.代码示例 2.代码说明 a.ReadS2PFile 方法: b.DataTable 结构: 三、S2PFileReader类的调用演示 1.使用示例 一、创作灵感 虽然MATLAB处理数据很实用,但是C#常用于程控仪器的控制,…...
gh_mirrors/docume/documentation微前端架构:大型项目的模块化拆分方案
gh_mirrors/docume/documentation微前端架构:大型项目的模块化拆分方案 【免费下载链接】documentation Architectural methodology for frontend projects 项目地址: https://gitcode.com/gh_mirrors/docume/documentation gh_mirrors/docume/documentation…...
别再迷信BBR了!用tc的4-state markov模型和iperf3,实测告诉你真实网络下的表现
BBR性能实测指南:用4-state markov模型还原真实网络环境 在技术圈里,关于BBR拥塞控制算法的讨论从未停歇。有人称其为"网络加速神器",也有人认为它不过是精心包装的营销噱头。作为运维工程师,我们需要的不是人云亦云&am…...
从零搭建到上手培训:PlayEdu开源版后台配置全流程指南(含学员导入与课程创建)
从零搭建到上手培训:PlayEdu开源版后台配置全流程指南(含学员导入与课程创建) 当你第一次登录PlayEdu后台管理系统时,面对众多菜单和功能选项,可能会感到无从下手。作为一款专业的企业培训系统,PlayEdu提供…...
企业级电商架构实战:Shopify+Algolia+Next.js打造高性能全栈方案
1. 项目概述:一个为大型电商场景设计的Next.js全栈模板如果你正在为你的公司或客户构建一个面向未来的、高性能的电商网站,并且对市面上那些“玩具级”的模板感到失望,那么这个项目值得你花时间深入研究。Enterprise Commerce 不是一个简单的…...
NBTExplorer终极指南:如何轻松编辑Minecraft游戏数据文件
NBTExplorer终极指南:如何轻松编辑Minecraft游戏数据文件 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经想要深入了解《我的世界》游戏内部…...
一杯奶茶的“品质革命”:香飘飘如何用产品力重写国民记忆
说起香飘飘(603711.SH),很多人的第一反应还是那句“杯子连起来可绕地球一圈”。这句广告语陪伴了一代人的成长,也让“香飘飘冲泡奶茶”的印象深深烙进了大众记忆。但这家拥有近20年历史的国民品牌,正在用全新的产品矩阵…...
deep-research医疗研究:医学文献分析与临床证据收集的终极指南
deep-research医疗研究:医学文献分析与临床证据收集的终极指南 【免费下载链接】deep-research An AI-powered research assistant that performs iterative, deep research on any topic by combining search engines, web scraping, and large language models. T…...
Ambar API 集成指南:RESTful接口的完整使用方法
Ambar API 集成指南:RESTful接口的完整使用方法 【免费下载链接】ambar :mag: Ambar: Document Search Engine 项目地址: https://gitcode.com/gh_mirrors/am/ambar Ambar 作为一款强大的文档搜索引擎,提供了丰富的 RESTful API 接口,…...
从入门到精通:Gemini 3.1 Pro解决办公问题的完整指南
概要Gemini 3.1 Pro 是 Google DeepMind 2026 年 2 月 19 日发布的旗舰大语言模型。相比前代,它在推理能力、上下文窗口和多模态处理上都有明显提升。ARC-AGI-2 得分 77.1%,是上一代 Gemini 3 Pro 31.1% 的两倍多。GPQA Diamond 94.3%,SWE-Be…...
ChanlunX:通达信缠论分析的终极可视化解决方案
ChanlunX:通达信缠论分析的终极可视化解决方案 【免费下载链接】ChanlunX 缠中说禅炒股缠论可视化插件 项目地址: https://gitcode.com/gh_mirrors/ch/ChanlunX 你是否曾经面对复杂的K线图,试图手动绘制缠论的笔、段和中枢,却感到力不…...
