力扣141环形链表问题|快慢指针算法详细推理,判断链表是否有环|龟兔赛跑算法

做题链接


目录

 前言:

 一、算法推导:

1.假设有环并且一定会相遇,那么一定是在环内相遇,且是快指针追上慢指针。

2.有环就一定会相遇吗?快指针是每次跳两步,有没有可能把慢指针跳过去?

3.那一定会在一圈内相遇吗?

 二、开始做题: 

1.注意题目的条件,先做特殊情况处理

2.定义快慢指针和注意判断语句

3.完整代码:

三、为什么快指针每次走两步,而不是三步或更多?

1.效率和正确性平衡:

2.两步最优:


前言:

    在环形链表问题中,使用快指针和慢指针的原因在于这种方法能够高效地检测链表是否包含环。这种方法也称为“龟兔赛跑算法”,具体来说,让快指针每次移动两步,慢指针每次移动一步,可以保证在存在环的情况下两指针最终会相遇。

 一、算法推导:

1.假设有环并且一定会相遇,那么一定是在环内相遇,且是快指针追上慢指针。

一定会在环内相遇:

设慢指针速度为v,则快指针速度为2v,

走了相同时间t时,

满指针走的路程:s=vt,则快指针为2s(2vt),

因此没有环不可能相遇,相遇的话必定在环内。

快指针追上慢指针:

慢指针不可能追上快指针,因为速度没有快指针快,永远被落在后面。

只有等快指针跑下一圈时遇上慢指针。就像我们跑800m的时候,有些跑得快的同学可以在跑第二圈的时候与有些跑得慢还在跑第一圈的同学相遇。

因此相遇时的情景一定是这样: 

2.有环就一定会相遇吗?快指针是每次跳两步,有没有可能把慢指针跳过去?

建立认知:

如图,当快指针在慢指针后面,且距离1的时候,下一回合就可以相遇。

那当快指针在慢指针后面,且距离2、3、4、5、...、n时呢?

建立认知:

如图,每走一回合,两者之间的距离会-1。

也就是说,不断的走,n-1-1-1-1-1........两者距离一定会减到1。

切入角度1:

那么就会发生如下图情况,两指针相遇。

切入角度2:

不断的走,n-1-1-1-1-1........两者距离一定会减到0。此时此刻,两指针相遇 


3.那一定会在一圈内相遇吗?

设一圈的长度为c,

入环后两指针的距离为n。则n<=c。

      每一回合n-1,最坏情况下,当n=c时,一共需要c个回合,n才为0,两个指针才能相遇。c个回合,慢指针刚好走一圈。因此,一圈内肯定会相遇。


 二、开始做题: 

1.注意题目的条件,先做特殊情况处理

 if(head==null || head.next==null){return false}


2.定义快慢指针和注意判断语句

如果代码中没有环,快指针遍历到终点时会指向空,

又因为快指针每次要连跳两格,所以要判断一下fast.next,避免空指针异常


3.完整代码:

public class Solution {public boolean hasCycle(ListNode head) {if(head==null || head.next==null){return false;}ListNode fast=head;ListNode slow=head;while(fast!=null && fast.next!=null &&slow!=null){fast=fast.next.next;slow=slow.next;if(fast==slow){return true;}}return false;}
}


三、为什么快指针每次走两步,而不是三步或更多?

1.效率和正确性平衡

     如果快指针每次走三步或更多步,可能会跳过慢指针,使得两者在环内无法相遇,或者需要更多的时间和步骤来相遇,算法的效率和简单性会下降。

2.两步最优

      前人通过大量实际问题和理论证明,快指针每次走两步,慢指针每次走一步,既能保证在环内快速相遇,又不会跳过相遇点。

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

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

相关文章

Spring Security认证授权介绍

一、目标 真正控制系统权限的&#xff0c;需要引入专门的安全框架才行&#xff0c;所以&#xff0c;我们今天重点来学习Spring家族中的一员Spring Security安全框架。最终呢&#xff0c;我们会使用Spring Security框架来控制养老项目的后台管理系统 能够熟悉常见的权限控制的方…

恒源云oss命令上传数据与下载数据

云服务器解压zip项目代码 (根目录) unzip 【】unzip /root/.../[已有的压缩包名].zip -d [解压到的目标文件夹路径]云服务器压缩zip项目代码 (根目录) zip -r 【自定义】.zip 【】/z

【通信模块】LoraWAN网络简介

LoRaWAN网络 技象科技相关文章总结&#xff0c;学习笔记&#xff0c;原文链接如下&#xff0c;转载请标明该出处&#xff1a; LORA&#xff1a; https://www.techphant.cn/tag/l-2 LORAWAN&#xff1a;https://www.techphant.cn/tag/l-3 其他&#xff1a;如LAN https://www…

【EMC专题】为什么芯片规格书ESD性能中看不到MM(机器放电模型)

在文章:【ESD专题】1.ESD基础及IEC61000-4-2标准 中我们讲到对于ESD静电放电模型,可分为器件级和系统级。其中器件级ESD包括三种类型,HBM人体放电模型、MM机械放电模型和CDM元件充电模型。 ①HBM(Human Body Model:人体放电模型):假设由人体静电对芯片放电 例:没有做好…

【Linux】一些基本指令

文章目录 前言Linux下基本指令Linux下一些常见的通配符Linux下的引号引用whoamiwholswhichaliaswhereisfindtouchmkdirrmdir & rmmancpmvcatmorelessheadtailechodatecalgrepzip & unziptarrz & szuname几个重要的热键关机 前言 在学习操作系统的时候&#xff0c;我…

[ABC279A] wwwvvvvvv 题解

题目传送门 \color{orangered}\text{题目传送门} 题目传送门 题意 给出仅由v和w组成的字符串 S S S。 输出 S S S 中有多少个尖点&#xff08;一个v有一个尖点&#xff0c;一个w有两个尖点&#xff09;。 分析 输入字符串&#xff0c;遍历每个字符。 如果这个字符是w&a…

【python doris】python连接doris数据库,并查询返回数据框

连接Doris数据库时&#xff0c;由于Doris与MySQL协议兼容&#xff0c;因此可以使用与MySQL兼容的Python库。以下是一些常用的Python库&#xff0c;您可以使用它们来连接和操作Doris数据库&#xff1a; pymysql是一个Python编写的MySQL客户端库&#xff0c;由于Doris与MySQL协议…

本地部署,Whisper: 开源语音识别模型

目录 简介 特点 应用 使用方法 总结 GitHub - openai/whisper: Robust Speech Recognition via Large-Scale Weak SupervisionRobust Speech Recognition via Large-Scale Weak Supervision - openai/whisperhttps://github.com/openai/whisper 简介 Whisper 是一个由 O…

LabVIEW开发射频测试和测量系统

本文将介绍如何使用LabVIEW开发一个射频&#xff08;RF&#xff09;测试和测量系统。该系统的主要功能是对射频信号进行测量和控制&#xff0c;提供用户友好的界面来进行各种操作。 硬件组成 射频信号发生器&#xff1a;用于生成特定频率和功率的射频信号。 射频功率计&#…

windows安装Python

一.下载Python 网址&#xff1a;Python官网 1.选取稳定版本进行下载 2.选好之后&#xff0c;download点击 3.划到页面底部&#xff0c;选择下载 二.安装 1.安装&#xff0c;这里因为之前弄过&#xff0c;所以长得不一样 首次安装的介绍 自定义安装和立即安装的区别&#x…

决策树与随机森林:比较与应用场景分析

决策树与随机森林&#xff1a;比较与应用场景分析 引言 决策树和随机森林是机器学习中广泛使用的两种算法&#xff0c;因其简单性和强大的功能而被广泛采用。决策树是一种树形结构的决策模型&#xff0c;易于理解和解释。随机森林则是通过集成多棵决策树来提高预测性能的模型…

奇异值分解(SVD)时间复杂度分析与优化

奇异值分解是一种矩阵分解的方法&#xff0c;大学线性代数里面也讲过奇异值分解的方法&#xff0c;因此这是一个为大家所熟知的算法。 1 SVD 时间复杂度分析 给定一个 m n m \times n mn 的矩阵 a \boldsymbol{a} a&#xff0c;按照下面公式做分解&#xff0c;其中 Σ \S…

mysql插入之前先测试环境试试

在生产环境中直接执行数据库操作可能会引起一系列问题&#xff0c;比如性能下降、数据不一致甚至系统崩溃。因此&#xff0c;在实际操作前在测试环境中进行彻底的测试非常重要。 测试环境准备&#xff1a; 确保测试环境与生产环境尽可能一致。这包括硬件配置、网络设置、数据库…

Java+TestNG

TestNG是Java中的一个测试框架&#xff0c;主要用于编写和执行自动化测试用例。它是一个功能强大的测试工具&#xff0c;旨在提供一个比JUnit更强大、更灵活的测试框架。TestNG的设计目标是简化广泛的测试需求&#xff0c;从单元测试&#xff08;隔离测试一个类&#xff09;到集…

福派斯牛肉高脂猫粮,为何成猫舍首选?揭秘其神奇功效!

&#x1f43e; 说到猫咪的伙食&#xff0c;咱们当铲屎官的可是操碎了心&#xff01;想让自家毛孩子吃得健康又开心&#xff0c;选对猫粮真的太重要了。今天就来聊聊为啥福派斯牛肉高脂猫粮能成为众多猫舍的首选&#xff0c;以及它到底能帮咱们的小猫咪哪些忙吧&#xff01; 1️…

mybatis查询数据字段返回空值

1.描述 数据苦衷实际存储字段全不为空 查询后brand_name/company_name为空 2.原因分析 带下划线的字段&#xff0c;都会返回空值&#xff0c;应该是字段映射出了问题 3.解决方案 在配置文件中添加下划线自动映射为驼峰 <configuration><settings><sett…

编写Dockerfile文件解释

编写Dockerfile文件的基本步骤如下&#xff1a; 首先&#xff0c;创建一个新的文本文件&#xff0c;并将其命名为Dockerfile。 在Dockerfile的第一行添加基础镜像的指令。例如&#xff0c;使用ubuntu 18.04作为基础镜像&#xff0c;可以添加以下指令&#xff1a; FROM ubunt…

电子档案系统与双层PDF及基于Elasticsearch全文检索技术的探索

随着信息化时代的到来&#xff0c;电子档案系统作为信息资源管理的重要工具&#xff0c;其发展和应用受到了广泛关注。本文旨在探讨电子档案系统中扫描件的数字化处理、双层PDF的构建及其优势&#xff0c;并详细阐述了全文检索技术在电子档案管理中的应用&#xff0c;特别是基于…

鸿蒙开发——axios封装请求、拦截器

描述&#xff1a;接口用的是PHP&#xff0c;框架TP5 源码地址 链接&#xff1a;https://pan.quark.cn/s/a610610ca406 提取码&#xff1a;rbYX 请求登录 HttpUtil HttpApi 使用方法

LangChain结合LLM做RAG文档搜索

我们知道LLM&#xff08;大语言模型&#xff09;的底模是基于已经过期的公开数据训练出来的&#xff0c;对于新的知识或者私有化的数据LLM一般无法作答&#xff0c;此时LLM会出现“幻觉”。针对“幻觉”问题&#xff0c;一般的解决方案是采用RAG做检索增强。 但是我们不可能把…