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

news2024/11/18 13:31:57

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.coloradmin.cn/o/1675878.html

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

相关文章

泰山众筹:创新电商模式引领共赢新潮流

一、泰山众筹模式创新解读 泰山众筹,这一电商领域的创新模式,通过巧妙地将产品销售与积分众筹相结合,为用户和平台带来了双赢的局面。在泰山众筹模式下,用户购买产品的同时能够积累积分,这些积分可以作为参与众筹的筹…

MySQL旧表做分区流程

1. 为什么做分区 数据库分区是将数据库中的数据划分成独立的部分,每个部分称为一个分区。分区可以根据特定的标准,如范围、列表或哈希值,将数据分隔到不同的物理存储位置中。数据库表分区可以在多种情况下提供显著的好处。以下是一些应该考虑…

Windows安装Linux子系统

WSL 是 Windows Subsystem for Linux 的简称,意思是 linux 版的 window 子系统。适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。 Linux 分发版可以在…

Windows Server 2022 环境下WEB和DNS服务器配置方法

目录 实验名称:WEB和DNS服务器配置实验目的实验原理:主要设备、器材:实验内容:配置本地WEB站点配置本地DNS服务器 实验名称:WEB和DNS服务器配置 实验目的 掌握 Windows Server 2022 环境下WEB服务器配置方法 掌握 Wi…

机器学习 - 集成学习算法介绍

集成学习的定义 集成学习(Ensemble Learning)是一种通过组合多个模型来提升预测性能的技术。简单来说,它就像是在开会时听取多人的意见,而不是只依赖一个人的观点,从而做出更准确的决策。 1. Bagging(Boo…

数据可视化训练第7天(json文件读取国家人口数据,找出前10和后10)

数据 https://restcountries.com/v3.1/all;建议下载下来,并不是很大 import numpy as np import matplotlib.pyplot as plt import requests import json #由于访问url过于慢;将数据下载到本地是json数据 #urlhttps://restcountries.com/v3…

Go微服务: Gin框架搭建网关, 接入熔断器,链路追踪以及服务端接入限流和链路追踪

概述 本文使用最简单和快速的方式基于Gin框架搭建一个微服务的网关调用微服务的场景网关作为客户端基于RPC调用某一服务端的服务并接入熔断和限流以及链路追踪具体场景:通过网关API查询购物车里的数据在最后,会贴上网关和购物车服务的代码仓库 服务端搭…

RK3566(泰山派):GP7101背光驱动

RK3566(泰山派):GP7101背光驱动 文章目录 RK3566(泰山派):GP7101背光驱动GP7101背光驱动电路配置i2c1设备树创建驱动编写Makefilegp7101_bl.c驱动触摸I2C驱动框架。驱动中的结构体probe函数devm_backlight_…

【opencv】图像拼接实验

实验环境:anaconda、jupyter notebook 实验用到的包:opencv、matplotlib、numpy 注:opencv在3.4.2之后sift就不是免费的了 我用的是3.4.1.15版本 实验使用到的图片 一、sift函数获取特征值 读入图片 book cv2.imread(book.png, cv2.IMRE…

每日两题 / 437. 路径总和 III 105. 从前序与中序遍历序列构造二叉树(LeetCode热题100)

437. 路径总和 III - 力扣(LeetCode) 前序遍历时,维护当前路径(根节点开始)的路径和,同时记录路径上每个节点的路径和 假设当前路径和为cur,那么ans 路径和(cur - target)的出现次数 /*** D…

linux系统修改网卡名称

说明: 因操作过程需要停用网卡,导致ssh远程连接不上,需要控制台登录操作。 测试环境: CentOS7.9、8.2虚拟机 Suse15 SP4虚拟机 操作步骤: 方法一: 1、 查看网卡当前名称及状态 ip a2、 将网卡状态从启用…

C# OpenCvSharp DNN 黑白老照片上色

C# OpenCvSharp DNN 黑白老照片上色 目录 效果 项目 代码 下载 参考 效果 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Diagnostics; using System.Drawing; using System.Drawing.Imaging; using System.Runtime.InteropS…

Nios-II编程

文章目录 一硬件部分设计1Qsys2Quartus 二软件1Nios-II Eclipse 三运行项目及效果1配置 FPGA 一硬件部分设计 1Qsys 1创建一个项目 2点击 Tools 下拉菜单下的 Platform Designer 工具,启动 Platform Designer 后,点击 File-save,在文件名中…

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

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

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

RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏) 文章目录 RK3566(泰山派):3.1寸屏幕D310T9362V1SPEC触摸驱动(竖屏)电路配置i2c1设备树创建驱动编写…

Llama 3 超级课堂 -笔记

课程文档: https://github.com/SmartFlowAI/Llama3-Tutorial 课程视频:https://space.bilibili.com/3546636263360696/channel/series 1 环境配置 1.1 创建虚拟环境,名为:llama3 conda create -n llama3 python3.10 1.2 下载、安装 pyt…

企业管理咨询公司不会选?一文带你避开“坑人”陷阱

近年来,企业管理咨询公司如雨后春笋般涌现,数量之多令人眼花缭乱。所以,面对这么多的企业管理咨询公司,企业该选谁?又该如何选择?本文将从以下几个方面为大家解析。 首先,我们要明确自己的需求和…

【RAG 论文】UPR:使用 LLM 来做检索后的 re-rank

论文:Improving Passage Retrieval with Zero-Shot Question Generation ⭐⭐⭐⭐ EMNLP 2022, arXiv:2204.07496 Code: github.com/DevSinghSachan/unsupervised-passage-reranking 论文:Open-source Large Language Models are Strong Zero-shot Query…

Intel HDSLB 高性能四层负载均衡器 — 快速入门和应用场景

目录 文章目录 目录前言与背景传统 LB 技术的局限性HDSLB 的特点和优势HDSLB 的性能参数基准性能数据对标竞品 HDSLB 的应用场景HDSLB 的发展前景参考文档 前言与背景 在云计算、SDN、NFV 高速发展并普遍落地的今天,随着上云业务的用户数量越来越多、数据中心的规模…

10 大IDEA 插件集合,解放双手!!【送源码】

1、POJO to JSON 开发工作中,常常在设计完 API 后,会使用如 GsonFormat 工具来将设计文档上的 JSON 格式数据生成Java实体类,这可以节省很多时间。 不过,在某些情况下,我们需要将已有实体类转换为 JSON 格式数据&#…