当前位置: 首页 > news >正文

LeetCode带环链表题深度解析(是否带环、寻找环的入口结点)

目录

一、链表是否带环

常规方法解析:

拓展问题:那么fast一次走三步,走四步...是否还会相遇?

fast :3 ,low :1

fast :4 ,low :1

总结:

二、寻找带环链表的入环节点

前言

        链表带环问题时常出现在面试当中,考察对快慢指针以及情况分析的能力。对于链表是否有环,通常可以使用 fast : 2 而 low :1 的快慢指针来判断,不相遇即无环,相遇即有环。对于环的入口节点,则让一个指针从起始点出发,另一个指针从相遇点出发(按原方向),以相同速度走,最终相遇于环的入口节点处。本文将深度解析,助力读者知其然并知其所以然。

一、链表是否带环

 141. 环形链表 - 力扣(LeetCode)

        解题方法:快慢指针,即慢指针一次走一步,快指针一次走两步,两个指针从链表起始位置开始走,如果链表带环则一定会在环中相遇,否则快指针率先走到链表的末尾。

深度解析:

常规方法解析:

由起始位置到入口节点位置的节点数为L,环状链表节点数为M。

假设low指针走到入口节点处,fast指针走到图示位置处,离low指针顺时针N个节点。

我们可知,fast只需要走M - N节点就可以追上low,由于fast每次走2个节点,而low每次走一个节点,那么每循环前进一次,fast与low的顺时针距离(M - N)就要缩短1(fast : 2 - low : 1)。

那么,在有限循环前进后,fast与low的顺时针距离(M - N)就要缩短为0,此时fast就会与low相遇

拓展问题:那么fast一次走三步,走四步...是否还会相遇?

fast :3 ,low :1

        有读者就说了,这有什么好解析的,在操场上绕圈跑步,跑得快的肯定可以追上跑的慢的喽,现实里是这样没错,但链表可能有些不同。我们来看:

由于代码:

​
for(int i = 0; i < 3; i++)
{fast = fast->next
}
low = low -> next;
if(fast == low) return true;
else
{...}​

你很可能就会越过low,导致无法相遇,但真无法相遇了吗?

如今只有 M - N 为奇 && M - 1 为奇 则不会相遇,那么会出现这样的情况吗??

由此我们可知,当fast : 3,low : 1时,同样可以相遇

fast :4 ,low :1

同理:

分析到这,我们发现,是否能够相遇,与M - N的奇偶无关,与M - N是否为3的倍数有关,当有余数时,fast超过low后,fast与low顺时针距离就变成了M - 1或M - 2,那么是否可以由M - 1,M - 2来判断M的奇偶性呢??

无法判断M的奇偶性,就无法判断N的奇偶性,就无法通过fast路程与low路程关系判断合理性。

所以当fast :4 , low :1时,是否相遇与M的值有关,无法判断是否会相遇。

总结:

        当fast的步数是一、二、三时,是可以确定一定会相遇的,但当步数超过三以后,就无法保证一定相遇,与环的节点数有关。

二、寻找带环链表的入环节点

142. 环形链表 II - 力扣(LeetCode)

        解题方法:  让一个指针从链表起始位置开始遍历链表,同时让一个指针从判环时相遇点的位置开始绕环运行,两个指针都是每次均走一步,最终肯定会在入口点的位置相遇。

假设fast指针与low指针于a点相遇,现将low指针移动链表起始位置处,两指针每步长都改为1

这里为什么low的路程是L + N而没有多加?M呢?

解释:在上文判断链表带环时已经知道 fast 追 low 的最长顺时针距离应该为M - 1,就算他是M,假设low指针又转了一圈回到原位置,那么路程就为M,可是fast要比low快啊,fast路程一定大于low,所以一定可以在low走完一圈之前追上low。

注意,这里判断是否带环时是快慢指针,找入环节点时,快慢指针就已经变成同速指针了,所以才有当low走L步长时,fast由相遇点走?圈再走M - N步到达b点,也就是入环节点处。

相关文章:

LeetCode带环链表题深度解析(是否带环、寻找环的入口结点)

目录 一、链表是否带环 常规方法解析&#xff1a; 拓展问题&#xff1a;那么fast一次走三步&#xff0c;走四步...是否还会相遇&#xff1f; fast &#xff1a;3 &#xff0c;low &#xff1a;1 fast &#xff1a;4 &#xff0c;low &#xff1a;1 总结&#xff1a; 二、…...

Redis--20--大Key问题解析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 大Key问题1.什么是 Redis 大 Key&#xff1f;在 Redis 中&#xff0c;大 Key 是指单个键值对的数据量非常大&#xff0c;可能包含大量数据。 2. Redis大Key的危害3.…...

如何使用Yarn Workspaces实现Monorepo模式在一个仓库中管理多个项目

Yarn Workspaces是Yarn提供的一种依赖管理机制&#xff0c;它支持在单个代码仓库中管理多个包的依赖。这种机制非常适合需要多个相互依赖的包的项目&#xff0c;能够减少重复依赖&#xff0c;加快依赖安装速度&#xff0c;并简化依赖管理。下面将详细介绍如何使用Yarn Workspac…...

测试ip端口-telnet开启与使用

前言 开发过程中我们总会要去测试ip通不通&#xff0c;或者ip下某个端口是否可以联通&#xff0c;为此我们可以使用telnet 命令来实现。 一、telnet 开启 可能有些人使用telnet报错&#xff0c;不是内部命令&#xff0c;可以如下开启&#xff1a; 1、打开控制面板&#xff…...

c#版本、.net版本、visual studio版本之间的对应关系

最近这几年一直没用过c#开发&#xff0c;都是从事Qt c开发工作&#xff0c;回想一下之前c#还要追溯到2019年&#xff0c;算算时间大概都已过去4&#xff0c;5年了&#xff0c;时间飞快。 2019真是个神奇的数字&#xff0c;vs2019是我用的时间最长的一个IDE&#xff0c;新冠起始…...

大语言模型训练

步骤 Self-Supervised Pre-Training&#xff0c;简称SPTSupervised Fine-Tuning&#xff0c;简称SFTLearning from Human Feedback&#xff0c;简称LfHF Self-Supervised Pre-Training 自监督预训练&#xff08;Self-Supervised Pre-Training&#xff0c;简称SPT&#xff09…...

ElasticSearch | Elasticsearch与Kibana页面查询语句实践

关注&#xff1a;CodingTechWork 引言 在当今大数据应用中&#xff0c;Elasticsearch&#xff08;简称 ES&#xff09;以其高效的全文检索、分布式处理能力和灵活的查询语法&#xff0c;广泛应用于各类日志分析、用户行为分析以及实时数据查询等场景。通过 ES&#xff0c;用户…...

idea快捷键

IDEA常见快捷键 Ctrl A 全写 Ctrl C 粘贴 Ctrl V 复制 Ctrl F 搜索 Ctrl R 替换 Ctrl Z 撤销 Ctrl D 复制行 Ctrl X 删除行&#xff0c;并且被删除的行复制到剪贴板中 Ctrl Y 删除一行 Ctrl Shift Z 反撤销 IDEA重要快捷键 Ctrl / 单行注释&…...

2024年全国信息素养大赛-图形化编程-省赛-绘制正方和三角形

绘制正方和三角形 【编程实现】 使用自制积木&#xff0c;绘制正方形和三角形。 【具体要求】 *程序尽量简洁。 1.画出喜庆的红色图形。 2.先画正方形&#xff0c;再画三角形。 3.正方形和三角形不重叠。 4.正方形和三角形不超出背最中红框的范围。 题目程序演示可点击…...

二进制编码 和 Base64编码

我需要将音频数据存为字符串&#xff0c;不知道存为 二进制编码 和 Base64编码 以下内容来自 DeepSeek : 1. 二进制编码 优点&#xff1a; 高效&#xff1a;二进制编码直接存储原始数据&#xff0c;占用空间小&#xff0c;处理速度快。适合传输&#xff1a;在需要高效传输的…...

微信小程序防止重复点击事件

直接写在app.wpy里面&#xff0c;全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…...

Kafka集群安装

Apache kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,是消息中间件的一种,用于构建实时数据管道和流应用程序。 Kafka官网:http://kafka.apache.org/ 安装环境: Kafka集群环境搭建,依赖于zookeep…...

EXCEL: (二) 常用图表

10. 图表 134-添加.删除图表元素 图表很少是一个单独的整体&#xff0c;而是由十几种元素/对象拼凑出来的。 学习图表就是学习当中各类元素的插删改。 ①图表中主要元素的定义 图表上的一个颜色就是一个系列&#xff0c;每个系列都对应原数据中的一列/一行值数据。 每个系…...

系统日志优化---自定义springboot-starter日志组件供各个服务使用

在优化项目时发现各个微服务都有各自的接口调用日志逻辑&#xff0c;比如每个服务都定义一个aop类拦截&#xff0c;十分冗余&#xff0c;其实是可以做成starter被各个服务引用使用&#xff0c;前提要先了解一下springboot自动装配原理 创建springboot工程&#xff0c;如果是jdk…...

《GB50348-2018 安全防范工程技术标准》:安防工程的权威指南

《GB50348-2018 安全防范工程技术标准》&#xff1a;安防工程的权威指南 【下载地址】GB50348-2018安全防范工程技术标准分享 GB50348-2018 安全防范工程技术标准本仓库提供的是《GB50348-2018 安全防范工程技术标准》的高清电子版资源 项目地址: https://gitcode.com/Open-s…...

RabbitMQ高级篇

目录 确保发送者的可靠 为什么需要确保发送者的可靠性 RabbitMQ 的发送者重连机制配置 springAMQP实现发送者确认 MQ的可靠性 为什么需要实现MQ的可靠性&#xff1f; 数据持久化 Lazy Queue 核心思想 总结RabbitMQ 如何保证消息的可靠性 持久化 Lazy Queue 消息…...

任务调度系统Quartz.net详解2-Scheduler、Calendar及Listener

任务调度系统Quartz.net详解2-Scheduler、Calendar及Listener Scheduler 调度器scheduler是Quartz中的独立工作容器&#xff0c;所有的Trigger和Job都需要注册到scheduler中才能工作。我们可以通过SchedulerFactory来获取scheduler实例。如下&#xff1a; //1.获取默认的标准…...

服务器出现蓝屏现象的原因有什么?

当服务器定期出现蓝屏的现象&#xff0c;则会影响到企业业务的连续性&#xff0c;同时还可能会导致重要数据信息丢失和系统稳定性下降&#xff0c;是一种较为复杂的技术问题&#xff0c;本文就来探讨一下导致服务器出现蓝屏的原因都有什么。 服务器出现蓝屏有可能是硬件出现了故…...

IP 地址与蜜罐技术

基于IP的地址的蜜罐技术是一种主动防御策略&#xff0c;它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意&#xff0c;将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描&#xff0c;寻找可入侵的目标时&…...

探索数据存储的奥秘:深入理解B树与B+树

key value 类型的数据红黑树&#xff08;最优二叉树&#xff0c;内存最优&#xff09;&#xff0c;时间复杂度&#xff1a;O&#xff08;logn&#xff09;,调整方便&#xff1b;一个结点分出两个叉B树一个节点可以分出很多叉数据量相等的条件下&#xff1a;红黑树的层数很高&am…...

mac学习芋道源码记录

nodejs安装 v16.20.0 cd yudao-ui-admin-vue2 node install -g yarn yarn install npm run local改配置不然node install -g yarn报错 前往-前往文件夹-/Library 创建 /nodejs/node_global /nodejs/node_cache npm config set prefix /Library/nodejs/node_global npm c…...

CCF 赛事介绍

CCF 赛事介绍 中国计算机学会&#xff08;CCF&#xff09;举办了诸多具有影响力的赛事&#xff0c;面向不同年龄段与群体&#xff0c;各有其特色要求。 一、青少年编程启蒙类 CCF 编程能力等级认证&#xff08;GESP&#xff09;&#xff1a; 适合年龄&#xff1a;涵盖中小学…...

MySQL表的约束

目录 一、空属性 二、默认值 三、列描述 四、zerofill 五、主键 六、自增长 七、唯一键 八、外键 一、空属性 两个值&#xff1a;null&#xff08;默认的&#xff09;和not null(不为空) 数据库默认字段基本都是字段为空&#xff0c;但是实际开发时&#xff0c;尽可能…...

相互带节奏

有些单词在发音方面是相互带节奏的 【1】 broccoli n.西兰花Berklee n.伯克利 Berklee College of Music 伯克利音乐学院 【2】 college n.大学&#xff0c;学院colleague n.同事&#xff0c;僚 league n.联合会&#xff0c;联赛&#xff1b;联盟&#xff0c;同盟 【3】…...

秒懂虚拟化(二):服务器虚拟化、操作系统虚拟化、服务虚拟化全解析,通俗解读版

秒懂虚拟化&#xff08;一&#xff09;&#xff1a;从概念到网络、存储虚拟化全解析&#xff0c;通俗解读版-CSDN博客这篇文章学习了虚拟化的概念、网络虚拟化和存储虚拟化&#xff0c;本节将继续学习服务器虚拟化、操作系统虚拟化、服务虚拟化。 1、服务器虚拟化 服务器虚拟…...

ubuntu 配置OpenOCD与RT-RT-thread环境的记录

1.git clone git://git.code.sf.net/p/openocd/code openocd 配置gcc编译环境 2. sudo gedit /etc/apt/source.list #cdrom sudo apt-get install git sudo apt-get install libtool-bin sudo apt-get install pkg-config sudo apt-install libusb-1.0-0-dev sudo apt-get…...

优化 MySQL 的慢查询

文章目录 1. 分析慢查询日志2. 优化查询语句3. 优化表结构4. 调整服务器参数5. 数据库引擎选择6. 缓存策略7. 定期维护数据库 1. 分析慢查询日志 首先&#xff0c;要开启 MySQL 的慢查询日志&#xff0c;以便能够记录执行时间超过阈值的查询语句。可以通过修改 MySQL 配置文件…...

【机器学习】聚类评价指标之福尔克斯–马洛斯指数(Fowlkes–Mallows Index, FMI)

福尔克斯–马洛斯指数&#xff08;Fowlkes–Mallows Index, FMI&#xff09;是一种用于评估聚类结果与实际标签之间一致性的指标。FMI 值可以用于衡量聚类的准确性&#xff0c;特别是在有真值标签的监督评估场景中。 计算公式 FMI 的计算基于以下公式&#xff1a; 其中&#…...

vue3模板引用ref

1.访问模板引用 要在组合式 API 中获取引用&#xff0c;我们可以使用辅助函数 useTemplateRef() 只可以在组件挂载后才能访问模板引用 <script setup> import { useTemplateRef, onMounted } from vue// 第一个参数必须与模板中的 ref 值匹配 const input useTempla…...

20250111英语学习

place check in window seat; aisle seat boarding pass 登机牌 boarding pass depart from terminal C Gate 4 (Gate door entre to the plane) place : Check in window seat boarding pass 登机牌 depart from terminal C Gate 4 (Gate door entre to the plane) you…...

【Rust自学】11.6. 控制测试运行:并行和串行(连续执行)测试

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 11.6.1. 控制测试的运行方式 cargo test和cargo run一样&#xff0c;cargo test也会编译代码并生成一个二进制文件用于测试&#xff0c;…...

CSS3 弹性盒子

CSS3 弹性盒子 介绍 CSS3 弹性盒子&#xff08;Flexbox&#xff09;是一种用于布局设计的强大工具。它提供了一种更加高效的方式来对容器内的子元素进行排列、对齐和分配空间。Flexbox 的设计目标是提供一种统一的布局模型&#xff0c;能够适应不同屏幕尺寸和设备类型&#x…...

LabVIEW 系统诊断

LabVIEW 系统诊断是指通过各种工具和方法检测、评估、分析和解决 LabVIEW 程序和硬件系统中可能存在的故障和性能问题。系统诊断不仅涵盖软件层面的调试与优化&#xff0c;还包括硬件交互、数据传输、实时性能等方面的检查和分析。一个成功的系统诊断能够显著提升LabVIEW应用程…...

UE5中制作地形材质

在创作大场景内容时&#xff0c;地形的设计和优化是至关重要的一步。利用UE中的地形系统&#xff0c;开发者能够高效地创建复杂的地形形态&#xff0c;同时保持游戏的性能和视觉效果。 1.在创建地形之前&#xff0c;先新建一个地形使用的混合材质球&#xff0c;添加节点Landsc…...

【题解】AT_abc388_e AtCoder Beginner Contest ABC388 E Simultaneous Kagamimochi

题目大意 题目传送门——原题面链接 建议阅读本次比赛 C 题题面。 有 N N N 块米糕&#xff0c;按大小升序排列&#xff0c;第 i i i 块米糕的大小为 A i A_i Ai​。 现在定义“堆叠式米糕”如下&#xff1a; 首先&#xff0c;选出两个米糕 A A A 和 B B B&#xff0…...

2025年01月11日Github流行趋势

项目名称&#xff1a;xiaozhi-esp32 项目地址url&#xff1a;https://github.com/78/xiaozhi-esp32项目语言&#xff1a;C历史star数&#xff1a;2433今日star数&#xff1a;321项目维护者&#xff1a;78, MakerM0, whble, nooodles2023, Kevincoooool项目简介&#xff1a;构建…...

Uniapp中实现加载更多、下拉刷新、返回顶部功能

一、加载更多&#xff1a; 在到达底部时&#xff0c;将新请求过来的数据追加到原来的数组即可&#xff1a; import {onReachBottom } from "dcloudio/uni-app";const pets ref([]); // 显示数据function network() {uni.request({url: "https://api.thecatap…...

哈希表及模拟实现

目录 一、哈希表的概念 二、模拟实现哈希表 1.开放地址法 (1)哈希表的数据加上状态标志 (2)哈希表扩容&#xff1a;载荷因子 (3)哈希函数&#xff1a;不同数据类型转换为整型 (4)完整代码 2.链地址法&#xff08;哈希桶&#xff09; (1)哈希表扩容&#xff1a;载荷因子…...

鸿蒙面试 2025-01-09

鸿蒙分布式理念&#xff1f;&#xff08;个人认为理解就好&#xff09; 鸿蒙操作系统的分布式理念主要体现在其独特的“流转”能力和相关的分布式操作上。在鸿蒙系统中&#xff0c;“流转”是指涉多端的分布式操作&#xff0c;它打破了设备之间的界限&#xff0c;实现了多设备…...

Apache XMLBeans 一个强大的 XML 数据处理框架

Apache XMLBeans 是一个用于处理 XML 数据的 Java 框架&#xff0c;它提供了一种方式将 XML Schema (XSD) 映射到 Java 类&#xff0c;从而使得开发者可以通过强类型化的 Java 对象来访问和操作 XML 文档。下面将以一个简单的案例说明如何使用 Apache XMLBeans 来解析、生成和验…...

基于视觉惯性 SLAM(VSLAM)、相机和 IMU 数据的融合执行 6 自由度位姿跟踪

案例来源&#xff1a;https://spectacularai.github.io/docs/sdk/wrappers/oak.html 适配相机&#xff1a;带IMU的 OAK-D 系列相机 基于视觉惯性 SLAM&#xff08;VSLAM&#xff09;、相机和 IMU 数据的融合执行 6 自由度位姿跟踪 ~~~~~~~&#xff08;分界线&#xff09;~~~~~…...

MySQL--》理解锁机制中的并发控制与优化策略

锁是计算机协调多个进程或线程并发访问某一资源的机制&#xff0c;在数据库中除了传统的计算机资源(CPU、RAM、I/O)的争用以外&#xff0c;数据也是一种供许多用户共享的资源&#xff0c;如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题&#xff0c;锁冲突…...

2、第一个GO 程序

引言 接下里我们就用Go Land 工具&#xff0c;开发第一个GO程序。大家也可以用其他的开发工具&#xff0c;例如 Vs Code 1、新建项目 第一个是选择你的程序保存位置 &#xff08;不要有中文&#xff09;。 第二个是你的Go的编译器的安装地址。 选择完毕后&#xff0c;就点击 …...

解决nginx多层代理后应用部署后访问发现css、js、图片等样式加载失败

一般是采用前后端分离部署方式&#xff0c;被上一层ng代理后&#xff0c;通过域名访问报错&#xff0c;例如&#xff1a;sqx.com.cn/应用代理路径。 修改nginx配置&#xff0c;配置前端页面的路径&#xff1a; location / {proxy_pass http://前端页面所在服务器的IP:PORT;pro…...

【Notepad++】Notepad++如何删除包含某个字符串所在的行

Notepad如何删除包含某个字符串所在的行 一&#xff0c;简介二&#xff0c;操作方法三&#xff0c;总结 一&#xff0c;简介 在使用beyoundcompare软件进行对比的时候&#xff0c;常常会出现一些无关紧要的地方&#xff0c;且所在行的内容是变化的&#xff0c;不方便进行比较&…...

Python的秘密基地--[章节11] Python 性能优化与多线程编程

第11章&#xff1a;Python 性能优化与多线程编程 在开发复杂系统时&#xff0c;性能优化和并发编程是不可忽视的重点。Python 提供了多种工具和技术用于优化代码性能&#xff0c;并通过多线程、多进程等方式实现并发处理。本章将探讨如何在 Python 中提升性能&#xff0c;并实…...

【Unity3D】利用IJob、Burst优化处理切割物体

参考文章&#xff1a; 【Unity】切割网格 【Unity3D】ECS入门学习&#xff08;一&#xff09;导入及基础学习_unity ecs教程-CSDN博客 【Unity3D】ECS入门学习&#xff08;十二&#xff09;IJob、IJobFor、IJobParallelFor_unity ijobparallelfor-CSDN博客 工程资源地址&…...

初学stm32 --- ADC模拟/数字转换器工作原理

目录 常见的ADC类型 并联比较型工作示意图 逐次逼近型工作示意图 ADC的特性参数 STM32各系列ADC的主要特性 ADC框图简介 参考电压/模拟部分电压 输入通道&#xff08; F1为例&#xff09; 转换序列&#xff08;F1为例&#xff09; 规则组和注入组执行优先级对比 规则…...

【MySQL】SQL菜鸟教程(一)

1.常见命令 1.1 总览 命令作用SELECT从数据库中提取数据UPDATE更新数据库中的数据DELETE从数据库中删除数据INSERT INTO向数据库中插入新数据CREATE DATABASE创建新数据库ALTER DATABASE修改数据库CREATE TABLE创建新表ALTER TABLE变更数据表DROP TABLE删除表CREATE INDEX创建…...

BM25(Best Match 25):信息检索的排序函数;稠密矩阵检索技术:RoBERTa

BM25(Best Match 25):信息检索的排序函数 常用于搜索引擎等场景,以下是关于它检索的内容及举例说明: 一、BM25检索的内容 文本数据: 文档集合:可以是大量的网页、学术论文、新闻文章、书籍内容等各种形式的文本集合。例如,一个学术搜索引擎可能会使用BM25对包含数百万…...