[leetcode] 45. 跳跃游戏 II

文章目录

  • 题目描述
  • 解题方法
    • 贪心
      • java代码
      • 复杂度分析

题目描述

给定一个长度为 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]

示例 1:

输入: nums = [2,3,1,1,4]
输出: 2
解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。

示例 2:

输入: nums = [2,3,0,1,4]
输出: 2

提示:

  • 1 <= nums.length <= 104
  • 0 <= nums[i] <= 1000
  • 题目保证可以到达 nums[n-1]

解题方法

贪心

其实这道题思路不难,我们只需要求出每一步能够到达的最远位置,若某一步能够到达或者超过终点,则返回最终步数。

那我们怎么求出每一步能够到达的最远位置呢?下面我来简单说一下。

  • 第一步,我们在数组下标为0的位置,我们可以到达的最远位置为nums[0]。
  • 第二步,我们分别以数组下标 1 ~ nums[0]为起点,计算以每个位置为起点时,可以到达的最远位置。
  • 依次类推,每一步我们以上一步的起点最远位置+1 ~ 上一步可以到达的最远位置为起点,计算可以到达的最远位置。直到到达或者超过终点,返回最终步数。

不明白的童鞋可以结合上面说的具体思路,看一下下方图示示例。
在这里插入图片描述

java代码

public int jump(int[] nums) {// 数组长度小于等于1时,跳跃次数为0if(nums == null || nums.length <= 1) {return 0;}// 当前步数可以到达的最远位置int end = 0;// 当前步数 +1 可以到达的最远位置int maxPosition = end;// 当前位置int curPosition = 0;// 跳跃次数int jumps = 0;// 从当前位置 遍历 到达 当前步数可以到达的最远位置while(curPosition <= end) {// 当前步数 +1 可以到达的最远位置 在 遍历的过程中不断更新maxPosition = Math.max(maxPosition, nums[curPosition] + curPosition);// 若maxPosition超过或等于数组最后一个元素的位置,则返回jumps + 1if(maxPosition >= nums.length - 1) {return jumps + 1;}// 当当前位置 遍历到 当前步数可以到达的最远位置时,跳跃次数 + 1, 当前步数可以到达的最远位置 更新为 当前步数 +1 可以到达的最远位置, jumps++if(curPosition == end) {jumps++;end = maxPosition;}curPosition++;}return 0;
}

复杂度分析

时间复杂度: O ( N ) O(N) O(N),需要遍历一次数组。
空间复杂度: O ( 1 ) O(1) O(1),只有常数级别的变量存储。


  • 个人公众号
    个人公众号
  • 个人小游戏
    个人小游戏

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

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

相关文章

C语言例3-28:位逻辑运算的例子

一、计算机中数值的表示 1. 二进制位与字节 计算机的内存是由许多称为字节的单元组成的。1字节由8个二进制位&#xff08;bit&#xff09;组成。每个二进制位的值为0或1。最右端的一位称为“最低位”&#xff0c;编号为0&#xff1b;最左端的一位称为“最高位”&#xff0c;编…

重装系统后鼠标识别不了咋办

不知道大家在重装系统时,有没有遇到过系统重装完成后,鼠标不能使用的情况。在这种情况下,我们要怎么操作电脑解决这个问题呢?今天就跟大家分享重装系统后鼠标识别不了咋办。 一、主板没有设置兼容usb 在重装系统时,如果主板没有设置兼容usb,就会出现鼠标使用不了的现象。…

模拟计算机和数字计算机

抽象符号只是对现实世界的描述而非模拟&#xff0c;这种描述的还原依赖于人脑对自然世界的物理共识&#xff0c;当你说 “这是山” 这三个简单的字时&#xff0c;听者会还原出一座大山的具象… 人们早在 70 多年前就习惯了以二进制 0 和 1 为基础的数字逻辑&#xff0c;开启了数…

【Docker】-- 如何安装docker

一、安装docker 首先要安装一个yum工具 yum install -y yum-utils 安装成功后&#xff0c;执行命令&#xff0c;配置Docker的yum源&#xff1a; yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 最后&#xff0c;执行命令&#x…

XJLS-84/620静态双位置继电器 DC220V 带柜内板前接线底座 JOSEF约瑟

XJLS-84系列静态双位置继电器 系列型号&#xff1a; XJLS-84/023A静态双位置继电器; XJLS-84/132A静态双位置继电器; XJLS-84/203静态双位置继电器; XJLS-84/222A静态双位置继电器; XJLS-84/312A静态双位置继电器; XJLS-84/502静态双位置继电器; XJLS-84/440静态双位置继电器; …

vue3 elementPlus 设置树形报错时 setCheckedKeys of undefined

第一种解决方法 nextTick(async ()>{ treeRef.value!.setCheckedKeys(rows.permissionIds, false) }) 第一种解决方法 onMounted(async () > { treeRef.value!.setCheckedKeys([3], false) }&#xff09;

基于Springboot的高校竞赛管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的高校竞赛管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs

Chart-based Reasoning: Transferring Capabilities from LLMs to VLMs 相关链接&#xff1a;arXiv 关键字&#xff1a;Vision-language models、ChartQA、multimodal reasoning、fine-tuning、synthetic data 摘要 本文提出了一种技术&#xff0c;将大型语言模型&#xff08;…

免费录音软件大集合,轻松录制高品质音频

“有没有免费的录音软件推荐呀&#xff1f;最近我在制作一个关于环境保护的宣传片&#xff0c;需要录制一些大自然的声音。但是我发现自己并不擅长录音&#xff0c;甚至不知道如何开始。希望有人能推荐一些免费且易用的录音软件&#xff0c;感激不尽&#xff01;” 在当今信息…

Grid数据增强算法

算法原理 class Grid(object):def __init__(self, d1, d2, rotate1, ratio0.5, mode0, prob0.8):self.d1 d1self.d2 d2self.rotate rotateself.ratio ratioself.mode modeself.st_prob self.prob probdef set_prob(self, epoch, max_epoch):self.prob self.st_prob …

基于深度学习的场景文本检测

CTPN 简介&#xff1a; 基于目标检测方法的文本检测模型&#xff0c;在Faster RCNN的基础上进行了改进&#xff0c;并结合双向LSTM增强了序列提取特征&#xff0c;通过anchor和gt的设计将文本检测任务转化为一连串小尺度文本框的检测。 解决问题&#xff1a; 文本长短不一&…

全球首位AI程序员是否会抢走程序员饭碗

目录 1.概述 2.AI程序员的优势分析 2.1.减少人为错误 2.2.提高开发效率 2.3.代码质量提高 ​​​​​​​2.4.智能调试和测试 ​​​​​​​2.5.需求理解和管理 ​​​​​​​2.6.优化项目管理 ​​​​​​​2.7.知识共享与复用 ​​​​​​​2.8.小结 3.AI程序…

ubuntu 20.04 Kimera semantic 运行记录

Ubuntu20.04 Kimera Semantic运行记录 Kimera VIO ROS 配置 MIT Kimera-VIO-ROS 安装 mkdir -p Kimera_ws/src cd Kimera_ws catkin init catkin config --cmake-args -DCMAKE_BUILD_TYPERelease -DGTSAM_TANGENT_PREINTEGRATIONOFF catkin config --merge-develcd src git…

【蓝桥杯】RMQ(Range Minimum/Maximum Query)

一.概述 RMQ问题&#xff0c;是求区间最大值或最小值&#xff0c;即范围最值问题。 暴力解法是对每个询问区间循环求解&#xff0c;设区间长度n&#xff0c;询问次数m&#xff0c;则复杂度是O ( nm )。 一般还可以使用线段树求解&#xff0c;复杂度是O(mlogn)。 但还有一种…

论文解读—— 基于边缘梯度方向插值和 Zernike 矩的亚像素边缘检测

论文&#xff1a;《 Subpixel edge detection based on edge gradient directional interpolation and Zernike moment》 地址&#xff1a; http://www.dpi-proceedings.com/index.php/dtcse/article/view/24488 摘要 在本文中&#xff0c;我们提出了一种基于边缘梯度方向插值…

PowerShell 一键更改远程桌面端口

前言 提高工作效率,安全性和规范化,最终实现一键更改Windows 远程桌面端口 前提条件 开启wmi,配置网卡,参考 一键更改远程桌面端口自动化脚本 默认端口3389变更后的端口3390win+r mstsc YOU_ip常规更改的连接方式win+r mstsc YOU_ip:3390需要恢复到原来的端口3390更改成3…

阿里云2025届春招实习生招聘

投递时间&#xff1a;2024年2月1日-2026年3月1日 岗位职责 负责大型客户“上云”&#xff0c;"用云"技术平台开发。 开发云迁移运维技术工具&#xff0c;帮助阿里云服务团队&&企业客户和服务商自主、高效的完成云迁移。 开发云运维技术工具&#xff0c;帮助…

【java】java环境变量分类

测试代码&#xff1a; public class TestSys {public static void main(String[] args) {/*** 获取所有的系统环境变量*/Map<String, String> map System.getenv();map.forEach((key, value) -> System.out.printf("env&#xff1a;key:%s->value:%s%n"…

leetcode1969--数组元素的最小非零乘积

1. 题意 给定一个非零的二进制位排列&#xff1b; 允许交换其中两个数的二进制位任意次。 求交换后得到数组的最小非零乘积。 如: p 3 a [ 001 010 011 100 101 110 111 ] p3\\ a[001\ 010\ 011\ 100\ 101\ 110\ 111]\\ p3a[001 010 011 100 101 110 111] 将010与101交换…

CPU的Cache和MESI协议

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第20篇&#xff0c;在这里分享给大家&#xff0c;这篇文章讲CPU的Cache和MESI协议。 为什么需要高速缓存&#xff1f; 通过图片可以清晰的看到&#xff0c;随着时间的发展CPU的性能差距和内存越来越大&#…