跳跃游戏 II解题思路详解

题解 跳跃游戏 II

    • 🤚我的博客
    • 🥛前言
  • 跳跃游戏 II
    • 描述
    • 示例
    • 提示
  • 题解
    • 初步思考
    • 思路细节
    • 代码实现
    • 完整代码
  • END
    • 💠END
      • 🏕️公众号

🤚我的博客

  • 欢迎光临我的博客:https://blog.csdn.net/qq_52434217?type=blog

🥛前言

最近有点忙,然后调整了刷题思路,打算按照题型刷题,先从动态规划入手。

跳跃游戏 II

描述

给定一个长度为 n0 索引整数数组 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]

题解

初步思考

根据题目描述,在下标为i时的最大跳数为nums[i],那么在i处能够跳的最远距离为i+nums[i]

例如在示例1中,从下标为0开始,最大跳数为2,那么可以跳到i=1,然后再跳动nums[1]次即可到达i=4处。

想必各位都能想到这一步,但是如何将这个思路转化成代码表达出来呢?

思路细节

首先,肯定是从i=0开始跳,且最大跳数为nums[0],例如示例一中的2

接下来就需要在i=1i=2中找到最大的跳数。为什么呢?我们只需要保证在当前最大跳数内找到下一次的最大跳数即可。以示例一为例,在i=0时,我们跳1步也可,跳2步也可。那么如果我们跳1步,则到达i=1的位置,这时我们的最大跳数为nums[1]=3,当我们选择直接跳跃3步时,就可以到达n-1=4的位置。而如果我们选择在i=0处跳跃2步时,则到达i=2的位置,此时能够跳的最大跳数为1

如果继续按照i=2的位置进行跳跃,那么就可以跳到i=3的位置,这个位置在第二次最大跳跃数范围内。也就是与i=1时向前跳跃2步的情况相同,可以不用再考虑。

那么如何增加跳跃的次数呢?根据上面的分析,无论是在i=2向前跳1步还是在i=1处向前跳2步都是一种情况,也就是只要当前位置跳跃的步数没有超过最大跳跃步数都可以视为当前跳跃次数。那么我们就能使用一个变量,保存最大跳跃的位置,当遍历的i值超过这个最大跳跃位置就对跳跃次数加一

代码实现

根据上面的思路细节,将思路转化成代码

首先需要找到最大的跳数和最大跳跃位置,在i处的最大跳跃次数为nums[i]那么能够跳跃的最大位置是nums[i]+i,而我们是需要找到第x次跳跃时的最大跳跃步数和位置。所以代码如下

maxPos = max(nums[i]+i,maxPos)

以示例一为例,无论i=0处跳到nums[1]还是nums[2],最大跳数都是一样的。具体功能可以参考下面的图

要知道跳跃到的位置i属于第几次跳跃,需要设置一个end下标,当跳跃的位置i=end时,就对跳跃次数加一,并且更新下一次的end位置为maxPosend初始化为0。随后的end则是maxPos的位置。

if i == end:
	end = maxPos
	res += 1

完整代码

  • python版本
class Solution:
	def jump(self,nums):
	res = 0
	end,maxPos = 0,0
	for i in range(len(nums)-1):
		maxPos = max(nums[i]+i,maxPos)
		
		if i == end:
			end = maxPos
			res += 1
	return res
  • java版本
class Solution{
	public int jump(int[] nums){
		int res=0,end=0,maxPos=0;
		for(int i =0;i<nums.length-1;i++){
			int pos = nums[i]+i;
			maxPos = pos>maxPos?pos:maxPos;
			if(i==end){
				end = maxPos;
				res++;
			}
		}
		return res;
	}
}

END

💠END

这个题不难,但是在代码的实现上写得比较仔细。毕竟我的目的就是为了能够强化思路转化代码的能力。

感叹时间过得太快了,计划赶不上变化。也可能是以前的变化不合理导致的,没有抓住问题关键,一直抓瞎。

为了找工作,现在只能放弃项目去专心刷题了。

一起加油!🆙🆙🆙

🏕️公众号

欢迎关注小夜的公众号,一个立志什么都能会的研究生。有不懂的地方请留言踢我!
微信公众号


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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

两个系统中的数据匹配方法

一、首先介绍几种常用的相似度计算 1.1最长公共子序列(LCS) 最长公共子序列&#xff08;Longest Common Subsequence&#xff0c;简称LCS&#xff09;是在两个或多个序列中寻找最长的公共子序列的问题。这里所说的“子序列”指的是原序列中元素的子集&#xff0c;但保持元素的原…

暗区突围资格 暗区突围测试资格 暗区突围资格申请

《暗区突围》作为一款备受瞩目的战术射击手游&#xff0c;以其独特的撤离玩法、高度拟真的枪战体验以及丰富的装备搜集系统&#xff0c;在玩家群体中迅速积累了极高的人气。游戏设定在一个充满未知与危险的封闭区域&#xff0c;玩家需要凭借智慧、策略与精湛的操作&#xff0c;…

使用./build.sh编译ORB_SLAM源码时出现报错:/usr/bin/ld:找不到 -lboost_serialization的解决办法

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、/usr/bin/ld:找不到 -lboost_serialization1.问题描述2.解决(1). 下载源码(2) . 编译安装 一、/usr/bin/ld:找不到 -lboost_serialization 1.问题描述 在安装…

DPDK e1000 ring buffer

基本原理 如图&#xff08;盗图&#xff09; 内存&#xff08;RAM&#xff09;和网卡&#xff08;NIC&#xff09;之间通过Descriptor ring 交互网络报文数据内存中需要申请内存 packet buffer 的内存池&#xff0c;内存池中的每个实例&#xff0c;地址是物理连续的或者IOVA…

day3_prefixSum

一、前缀和技巧 重点 前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和 个人理解&#xff1b;预计算&#xff0c;空间换时间 1.(一维数组的前缀和)303区域和检索-数组不可变 获取闭区间值 [left,right] -> preSum[right 1] - preSum[left],其中preSum[right…

泵站远程启停

随着物联网技术的迅猛发展&#xff0c;传统泵站的管理方式正面临前所未有的变革。在这一变革的浪潮中&#xff0c;HiWoo Cloud平台凭借其卓越的技术实力和创新理念&#xff0c;为泵站远程启停控制带来了全新的解决方案。本文将详细介绍HiWoo Cloud平台在泵站远程启停方面的应用…

基于Python的飞机大战游戏

学习目标 了解 飞机大战游戏的规则 理解 面向对象思想,会独立设计游戏的类与模块 掌握 pygame模块的使用 1.1 游戏介绍 飞机大战是一款由腾讯公司微信团队推出的软件内置的小游戏,这款游戏画面简洁有趣,规则简单易懂,操作简便易上手,在移动应用兴起之初曾风靡一时。 1.1.…

Navicat导出表结构到Excel或Word

文章目录 sql语句复制到excel复制到Word sql语句 SELECTcols.COLUMN_NAME AS 字段,cols.COLUMN_TYPE AS 数据类型,IF(pks.CONSTRAINT_TYPE PRIMARY KEY, YES, NO) AS 是否为主键,IF(idxs.INDEX_NAME IS NOT NULL, YES, NO) AS 是否为索引,cols.IS_NULLABLE AS 是否为空,cols.…

Lombok介绍、使用方法和安装

目录 1 Lombok背景介绍 2 Lombok使用方法 2.1 Data 2.2 Getter/Setter 2.3 NonNull 2.4 Cleanup 2.5 EqualsAndHashCode 2.6 ToString 2.7 NoArgsConstructor, RequiredArgsConstructor and AllArgsConstructor 3 Lombok工作原理分析 4. Lombok的优缺点 5. 总结 1 …

Go实现树莓派读取at24c02 eeprom读写数据

步骤 启用i2c 参考 Go实现树莓派读取bh1750光照强度 代码 package mainimport ("fmt""periph.io/x/conn/v3/i2c" )type AT24C02Device struct {dev *i2c.Dev }func NewAT24C02Device(addr uint16, bus i2c.BusCloser) (*AT24C02Device, error) {var (d…

wordpress主题 7B2 PRO主题5.4.2免授权直接安装

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 WordPress 资讯、资源、社交、商城、圈子、导航等多功能商用主题&#xff1a;B2 PRO 其设计风格专业且时尚&#xff0c;功能十分强大&#xff0c;包括多栏布局、自定义页面、强大的主…

03c++重载运算符

1、深入理解new和delete原理 #include<iostream> using namespace std;/* new 和 delete 1、malloc和new的区别 new 内存开辟构造函数 2、free和 delete的区别 delete 内存回收析构函数 开辟失败malloc返nullptr ,new抛出bad_alloc异常new->operator new delete -&…

AppBuilder低代码体验:构建雅思大作文组件

AppBuilder低代码体验&#xff1a;构建雅思大作文组件 ​ 在4月14日&#xff0c;AppBuilder赢来了一次大更新&#xff0c;具体更新内容见&#xff1a;AppBuilder 2024.04.14发版上线公告 。本次更新最大的亮点就是**新增了工作流&#xff0c;低代码制作组件。**具体包括&#x…

JavaEE初阶-多线程4

文章目录 一、单例模式1.1 饿汉模式1.2 懒汉模式 二、阻塞队列1.1 生产者消费者模型1.1.1 现实生活举例1.1.2 生产者消费模型的两个优势1.1.2.1 解耦合1.1.2.2 削峰填谷 1.2 阻塞队列代码1.2.1 使用java标准库的阻塞队列实现生产者消费者模型1.2.2 实现自己的阻塞队列 一、单例…

【Go语言初探】(一)、Linux开发环境建立

一、操作系统选择 选择在Windows 11主机上运行的CentOS 7 Linux 虚拟机&#xff0c;虚拟化平台为VMWare Workstation. 二、安装Go语言环境 访问Go语言官网&#xff0c;选择Linux版本下载&#xff1a; 解压&#xff1a; tar -xvf go1.22.3.linux-amd64.tar.gz检验安装结果&…

uniapp + vue3 使用axios

场景 uniapp自带的uni.request不太好用&#xff0c;也有可能是自己用axios用的太熟悉了&#xff0c;所以还是用axios趁手点&#xff0c;所以尝试在uniapp中使用axios。 操作 因为uniapp项目没有package.json&#xff0c;所以先在项目根目录下执行 npm init, 执行完毕后直接…

算法设计与分析 例题解答 解空间与搜索

1.请画出用回溯法解n3的0-1背包问题的解空间树和当三个物品的重量为{20, 15, 10}&#xff0c;价值为{20, 30, 25}&#xff0c;背包容量为25时搜索空间树。 答&#xff1a; 解空间树&#xff1a; 搜索空间树&#xff1a; 2. 考虑用分支限界解0-1背包问题 给定n种物品和一背包…

线路和绕组中的波过程(三)

本篇为本科课程《高电压工程基础》的笔记。 本篇为这一单元的第三篇笔记。上一篇传送门。 冲击电晕对线路上波过程的影响 实际中的导线存在电阻&#xff0c;而且还有对地电导&#xff0c;会消耗一部分能量。但是因为雷击所涉及的传输距离很短&#xff0c;所以几乎可以忽略这…

JS代码随想录(一):数组

代码随想录 一、数组理论基础 二、LeetCode 704. 二分查找 三、LeetCode 27. 移除元素 四、LeetCode 977.有序数组的平方 五、LeetCode 209.长度最小的子数组 六、LeetCode 59.螺旋矩阵II 七、数组总结 一、数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合。 数组…

你真的会用 ChatGPT 吗?来看看这 4 个模式,让你的 AI 技能更上一层楼!(上)

一年半已经过去&#xff0c;ChatGPT 虽然风靡一时&#xff0c;但真正发挥其超过 30% 效能的人却寥寥无几。许多资深用户依然沿用传统的人机交互方式&#xff0c;认为只需要事无巨细地编写指令&#xff0c;让 AI 服从即可。大多数人并不了解这些生成式 AI 的某些不为人之的特性&…