想要精通算法和SQL的成长之路 - 跳跃游戏系列

news2024/12/25 9:13:57

想要精通算法和SQL的成长之路 - 跳跃游戏系列

  • 前言
  • 一. 跳跃游戏
  • 二. 跳跃游戏II

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 跳跃游戏

原题链接
给定一个非负整数数组 nums ,你最初位于数组的第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个下标。

  • 输入:nums = [2,3,1,1,4]
  • 输出:true
  • 解释:可以先跳 1 步,从下标 0 到达下标 1, 然后再从下标 1 跳 3 步到达最后一个下标。

思路:

  • 我们遍历数组,假设每次遍历到的那个位置为起点。
  • 求得以每个下标作为起点时,能够跳到的最大覆盖范围 Math.max(maxRight, i + nums[i])
  • 同时我们要注意,每次遍历的循环范围是不同的,右边界maxRight可能会改变。最后看覆盖范围是否包括终点即可maxRight >= nums.length - 1

伪代码就是:

public boolean canJump(int[] nums) {
	// 右边界
    int maxRight = 0;
    // 数组长度为1的时候,就相当于已经在终点了
    if (nums.length == 1) {
        return true;
    }
    for (int i = 0; i <= maxRight; i++) {
    	// 更新右边界,取覆盖范围最右侧的边界值
        maxRight = Math.max(maxRight, i + nums[i]);
        // 如果右边界超过了终点(数组长度-1)说明可到达终点
        if (maxRight >= nums.length - 1) {
            return true;
        }
    }
    return false;
}

二. 跳跃游戏II

原题链接
给你一个非负整数数组 nums ,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置假设你总是可以到达数组的最后一个位置。

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

这题和第一题有什么不同呢?

  • 第一题:在[0,maxRight]这个范围内的元素都会遍历。用的是穷举,因为只需要判断是否可到达终点。
  • 第二题:因为最少跳跃次数的限制,需要考虑何时才应该去跳跃。

局部最优:每次跳的距离尽可能的远,如果还没有到达终点,就再跳一次(跳跃次数+1)
整体最优:跳到终点 / 跳跃次数最小。

那么第二题的思路如下:(以第一步和第二步为例)

  1. 求得第一步可以到达的范围是:[0, one]
  2. [0, one]这一区间进行遍历,求得这一区间内,第二次跳跃时可以到达的最远距离two
  3. 一旦你确定了第二次可到达的最远距离,在计算跳跃次数的时候,对于程序而言,你怎么跳的已经无所谓了。因为你不可避免的需要跳两次。
  4. 也就是说,你遍历到one这个下标的时候,次数就应该加1了,跳到第二个最远距离two的时候,次数同样应该加1。
public int canJump(int[] nums) {
    int step = 0;
    int curMaxEnd = 0;// 当前能够跳的最远距离
    int nextMaxEnd = 0;// 下一次跳跃的最远距离
    for (int i = 0; i < nums.length - 1; i++) {
        // 更新本次跳跃范围内,不断更新可以到达的最远距离
        nextMaxEnd = Math.max(nextMaxEnd, i + nums[i]);
        // 跳到本次最远的地方之后,步数+1,开始计算下一次的最远跳跃下标,
        if (i == curMaxEnd) {
            // 下一次跳跃,更新当前可跳跃的最远距离,步数+1
            curMaxEnd = nextMaxEnd;
            step++;
        }
    }
    return step;
}

在这里插入图片描述
结合上面的流程图来看,我们知道

  1. 第二次跳跃的时候,可以到达的最远距离就是4了。也就是终点下标。那么整个步骤需要2次跳跃。
  2. 我们记i == curMaxEnd为一次跳跃。也就是我们遍历到下标为2的位置的时候,跳跃次数就是2次了。已经能够跳跃到终点了。

试想一下,如果我们的for循环写i < nums.length,会发生什么?

  1. 第二次满足i == curMaxEnd(第二次跳跃)的时候,curMaxEnd的值被赋值为nextMaxEnd,也就是4。处于数组下标区间内。
  2. 那么当第三次 i == curMaxEnd的时候,步数还会+1。就多余了。
  3. 因此我们记得是:本次跳跃能够到达的最远距离,当你第二次已经能够到达的时候,就不应该继续往后计数了。因此for循环写的是i < nums.length - 1

(可能有点绕,但是可以仔细想一下-1的意义)

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

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

相关文章

TCP、UDP API调用(实时聊天)

1. TCP连接 服务器创建ServerSocket&#xff0c;并指定端口进行监听&#xff1b; ServerSocket通过accept()接受用户请求并返回Socket&#xff0c;否则一直处于监听状态&#xff0c;线程阻塞&#xff1b; 客户端创建Socket&#xff0c;需要指定服务器的ip和端口&#xff0c;向服…

OpenGL之纹理映射

1.1 Texture Mapping 1.1.1 在OpenGL编程中&#xff0c;应用纹理主要分为四步&#xff1a; 创建纹理对象&#xff0c;并为它装载一个纹理&#xff1b; glGenTexture(1,&texName); //为每个纹理编号&#xff0c;1代表生成一个编号 glBindTexture(GL_TEXTURE_2D,texNam…

一道题学习node.js中的CRLF注入

前言 这几天刷题遇到在node.js题目中注入CRLF实现ssrf的题目&#xff0c;对于我来说知识听新颖。在此记录一下。 CRLF注入 学习过http请求走私漏洞的师傅对于这个CRLF肯定不会陌生。所谓的CRLF就是回车加换行。常用于http数据包。字段之间用一个CRLF分割&#xff0c;首部和主…

【MySQL篇】约束语法及演示总结(全)

目录 理解约束&#xff1a; 约束语法及添加、删除约束语法&#xff1a; 约束总览&#xff1a; ​1、非空约束 2、唯一约束 3、主键约束 4、默认约束 5、外键约束 案例演示&#xff1a; 加深格式记忆&#xff1a; 理解约束&#xff1a; 约束实际上就是我们对表中数据的…

Redis命令及原理学习(一)

redis介绍 redis 是 Remote Dictionary Service 的简称&#xff1b;也是远程字典服务&#xff1b; 节点 通过tcp与redis建立连接交互请求回应模型 redis是一种内存数据库&#xff1a;数据都在内存中。redis是一种kv数据库&#xff1a; 存储方式操作方式 redis是一种数据结构数…

【访谈】Eotalk Vol.05: API 全生命周期管理,如何解决企业 API 安全问题

Eotalk 是由 Eolink 和各合作方一起发起的泛技术聊天活动&#xff0c;每期我们会邀请一些技术圈内的大牛聊聊天&#xff0c;聊一下关于技术、创业工作、投融资等热点话题。 本期 Eotalk 我们邀请到的嘉宾是来自星阑科技的 CTO 徐越~ &#x1f44f;&#x1f44f; 徐越是一位 90…

红黑树(4万字文章超详细,只为一个目的)

我写这篇文章的主要目的其次才是积累知识,主要是因为我想打一个同学的脸. 事情是这样的.我现在中学嘛,我们班上有一个同学他学了红黑树啊,就一副"不可一世"的样子.在我面前炫耀啊.当时我就想立马打他的脸,可是我有没有实力,所以才学习红黑树学到深夜,写了篇博客.言归…

深度解析:会用Excel,还有必要学Python吗?

前言 某站上有个问题&#xff1a; 我都会用Excel了&#xff0c;还有必要学Python吗&#xff1f; &#xff08;文末送读者福利&#xff09; 这个问题大概率可以说明问这个问题的这位同学目前还没有遇到非Python不可的场景&#xff0c;之所以产生了学Python的念头是因为这两年P…

今日分享:文字转语音软件哪个好

如今已经进入到了一个短视频时代&#xff0c;大家饭后或者闲暇时都会通过刷视频来消磨时间&#xff0c;而部分小伙伴看到一些有趣的内容&#xff0c;也想试着自己制作一下。但众所周知&#xff0c;视频拍摄容易&#xff0c;后期剪辑制作确实异常困难的&#xff0c;有许多道工序…

从boot引导到loader引导完整运行

此文针对该文章对loader引导进行了完善后的完整运行过程。&#xff08;具体细节请参见下文&#xff09; boot引导升级&#xff0c;成功引导运行loader_What’smean的博客-CSDN博客boot引导升级&#xff0c;成功引导运行loaderhttps://blog.csdn.net/weixin_42492218/article/d…

【数据结构】11道LeetCode链表OJ练习

文章目录1. 移除链表元素2. 反转链表3. 链表的中间节点4. 链表中倒数第k个节点5. 合并两个有序链表6. 链表分割7. 链表的回文结构8. 相交链表9. 环形链表10. 环形链表II11. 复制带随机指针的链表补充内容&#xff1a;浅谈顺序表和链表的区别1. 移除链表元素 移除链表元素OJ链接…

扫雷游戏优化详解——c语言实现

文章目录 一、扫雷游戏的简单认识与解释 二、扫雷游戏的代码及思路实现 一、扫雷游戏的思路 1、菜单打印 2、创建扫雷区 3、初始化雷区 4、打印雷区 5、布置雷区 6、排雷 三、扫雷游戏代码的整合 game.h game.c test.c 标题&#xff1a;猜数字小游戏 作者&#xff1a;Ggggg…

你适合考PMP还是软考?两者的区别是否清楚,分别能给你带来什么价值

PMP与软考之间有什么区别&#xff0c;应该考哪个更适合自己&#xff1f; 下面从9个方面给大家简单的介绍做一个对比&#xff0c;希望能帮上忙~ 软考和PMP哪个更适合自己&#xff1f; 01 考试介绍 PMP&#xff1a;PMP是项目管理专业人士资格认证&#xff0c;由美国项目管理协…

腾讯云相同配置8核16G的云服务器和轻量服务器该如何选择?

很多个人或者中小企业用户在选择云服务器的时候&#xff0c;已经确认配置的情况下&#xff0c;去选购的时候发现有出现了轻量应用服务器&#xff0c;那么轻量应用服务器和云服务器又有哪些区别&#xff0c;价格为啥又有那么大的差别&#xff0c;该如何选择呢&#xff1f; 从上边…

SSM框架整合详细教程

目录 1. 什么是SSM&#xff1f; 2. SSM整合的时候容器之间如何访问 3. SSM下面的开发步骤 4. SSM整合时候时容易混乱的知识点 1. 什么是SSM&#xff1f; SSM是对三个框架名字的简写&#xff0c;其中第一个S指的是SpringMVC,第二个S指的是Spring&#xff0c;第三个M指的是M…

项目搭建(七)爱心代码❤网站部署(静态网站)

爱心代码❤网站部署&#xff08;静态网站&#xff09;一、环境基础二、修改Tomcat启动配置三、放置静态网站四、启动Tomcat一、环境基础 如果你已经部署了Apache-Tomcat&#xff0c;恭喜你&#xff0c;你已经完成90%的部署工作 如果没有tomcat&#xff0c;那你先部署tomcat吧 …

4_单机优化(确定性算法,优化框架)

优化框架机器学习的优化框架正则化经验风险最小化优化算法的收敛速率假设条件凸函数定义强凸函数定义光滑函数定义优化算法的分类机器学习的优化框架 正则化经验风险最小化 有监督的机器学习问题&#xff1a; 假设输入输出数据 Sn{(xi,yi);i1,...,n}S_n \left\{(x_i, y_i);…

C++与C语言中的字符串

目录 1、关于c语言中的字符串 &#xff08;1&#xff09;c语言中字符串与字符指针 &#xff08;2&#xff09;字符串结尾 2、关于c中的字符串string &#xff08;1&#xff09;从本质上了解string &#xff08;2&#xff09;c中的字符串转换与关联 &#xff08;3&#x…

【MySQL入门指北】MySQL备份及恢复

MySQL备份及恢复 文章目录MySQL备份及恢复1.Percona 介绍2.安装Percona 需要的 MySQL 包3.安装percona-xtrabackup4.完全备份流程5.完全恢复流程6.增量备份流程7.差异备份8.差异恢复流程9.记录的导入和导出10.mysqldumpbinlog11.MySQL恢复数据12.二进制日志恢复13.误删除库的问…

基于51单片机的室内温度可燃气体检测报警系统Proteus仿真

资料编号&#xff1a;133 下面是相关功能视频演示&#xff1a; 133-基于51单片机的室内温度可燃气体检测报警系统Proteus仿真&#xff08;源码仿真全套资料&#xff09;功能介绍&#xff1a; 采用51单片机作为主控&#xff0c;LCD1602显示当前温度和可燃气体浓度&#xff0c;…