Floyd 判环算法
下面从算法原理、数学证明、代码实现、变体应用、性能优化、工程实践六个维度,为你全面剖析 Floyd 判环算法(Floyd's Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm)。一、算法概述核心思想Floyd 算法用两个速度不同的指针遍历链表:慢指针(tortoise):每次走 1 步快指针(hare):每次走 2 步如果链表有环,快指针最终会从后面追上慢指针(在环内相遇);如果无环,快指针会先到达null。为什么叫龟兔赛跑?text想象一个环形跑道: - 乌龟(慢指针)每次走 1 步 - 兔子(快指针)每次走 2 步 - 在环形跑道上,兔子一定会从后面追上乌龟 - 在直线跑道上,兔子会先到达终点二、算法原理与数学证明1. 第一阶段:检测是否有环text设: - 链表头到环入口距离 = a - 环入口到相遇点距离 = b - 环的周长 = c - 慢指针走的步数 = s - 快指针走的步数 = f = 2s(因为速度是 2 倍) 相遇时: - 慢指针在环内走了 b 步,s = a + b - 快指针比慢指针多走了 k 圈(k ≥ 1) f - s = k × c 2s - s = s = k × c 因此:a + b = k × c2. 第二阶段:找环入口(关键证明)text从上面的公式:a + b = k × c 推导:a = k × c - b 这意味着: - 从链表头走 a 步 → 到达环入口 - 从相遇点走 a 步 → 绕环 k 圈后回到环入口 因此:让两个指针分别从头和相遇点同时前进(每次 1 步), 它们会在环入口相遇!3. 图示说明texta b 头 ────→ ● ──────────→ ● ← 相遇点 ↑ │ │ │ └──────────────┘ (环周长 c) 从头到入口:a 步 从入口到相遇点:b 步 从相遇点回到入口:c - b 步 a = k×c - b → 从头走 a 步 = 从相遇点走 a 步(即 c-b + (k-1)×c)三、代码实现1. 基础版本:检测是否有环javapublic class FloydCycleDetection { /** * 检测链表是否有环 * @return true 有环,false 无环 */ public boolean hasCycle(ListNode head) { if (head == null || head.next == null) { return false; } ListNode slow = head; ListNode fast = head; while (fast != null fast.next != null) { slow = slow.next; // 走 1 步 fast = fast.next.next; // 走 2 步 if (slow == fast) { return true; // 相遇,有环 } } return false; // 快指针到达 null,无环 } }2. 完整版本:找环入口java/** * 检测环并返回环入口节点 * @return 环入口节点(无环返回 null) */ public ListNode detectCycle(ListNode head) { if (head == null || head.next == null) { return null; } ListNode slow = head; ListNode fast = head; // 第一阶段:检测是否有环 while (fast != null fast.next != null) { slow = slow.next; fast = fast.next.next; if (slow == fast) { // 第二阶段:找环入口 ListNode ptr = head; while (ptr != slow) { ptr = ptr.next; slow = slow.next; } return ptr; // 环入口 } } return null; // 无环 }3. 计算环的长度java/** * 计算环的长度 */ public int cycleLength(ListNode head) { if (head == null || head.next == null) { return 0; }

相关新闻

差分进化算法原理与Python实现:优化复杂工程问题的全局搜索利器

差分进化算法原理与Python实现:优化复杂工程问题的全局搜索利器

1. 项目概述最近在优化一个工程参数调优的问题,试了一圈传统的梯度下降和遗传算法,效果总是不太理想,要么容易卡在局部最优解,要么收敛速度慢得让人着急。后来在文献里翻到了差分进化算法(Differential Evolution, DE&…

2026/8/3 17:15:42 阅读更多 →
Iced容器技术:Rust轻量化跨平台GUI开发实践

Iced容器技术:Rust轻量化跨平台GUI开发实践

1. Iced容器技术解析:轻量化与跨平台GUI开发新思路最近在开发一个需要跨平台部署的桌面应用时,偶然发现了Iced这个基于Rust语言的GUI框架。它提出的"容器"概念让我眼前一亮——不同于传统GUI框架的臃肿架构,Iced通过极简的容器模型…

2026/8/3 14:15:18 阅读更多 →
金蝶ERP与AI智能助手集成开发实战:从自然语言处理到业务自动化

金蝶ERP与AI智能助手集成开发实战:从自然语言处理到业务自动化

最近在技术社区里,不少开发者都在讨论一个有趣的现象:当传统的企业管理软件遇上新兴的AI技术,会碰撞出怎样的火花?"金蝶为引,魔女降临"这个标题背后,实际上反映的是企业级应用智能化转型的一个典…

2026/8/3 12:07:18 阅读更多 →

最新新闻

Hot-763 划分字母区间

Hot-763 划分字母区间

解法1:贪心划分,遍历两次,第一次记录last_place,第二次iend判断片段贪心记录class Solution:def partitionLabels(self, s: str) -> List[int]:answer []# 第一遍,记录每次字符最后的位置last_place {}for i,char in enumera…

2026/8/4 1:30:15 阅读更多 →
UE4动画蓝图双骨骼IK实战:彻底解决角色手部穿墙问题

UE4动画蓝图双骨骼IK实战:彻底解决角色手部穿墙问题

1. 项目概述:从“穿模”到“沉浸感”的最后一公里在UE4的角色动画开发中,手部穿墙(或者说“穿模”)是个老生常谈却又极其影响体验的问题。想象一下,你精心打磨了一个第一人称射击游戏,玩家持枪靠近墙壁时&a…

2026/8/4 1:30:15 阅读更多 →
动态规划与图论:oj104-106算法题精解

动态规划与图论:oj104-106算法题精解

1. 题目背景与核心考察点解析最近在算法练习平台上频繁看到oj104、oj105、oj106这三道经典题目的讨论。作为算法进阶路上的必经关卡,这三道题涵盖了动态规划、图论和数据结构等核心知识点。本文将结合我个人刷题经验,深入剖析这三道题的解题思路和实现细…

2026/8/4 1:30:15 阅读更多 →
MinHash算法性能优化.docx

MinHash算法性能优化.docx

MinHash算法性能优化 时间:2026年3月11日## MinHash算法介绍 MinHash(Minimum Hashing,最小哈希)是一种用于快速估算两个集合相似度的算法,属于局部敏感哈希(LSH)技术的一种。### 核心原理 M…

2026/8/4 1:30:15 阅读更多 →
视频内容转换成文字用什么工具?2026年七款视频音频转文字工具实测盘点

视频内容转换成文字用什么工具?2026年七款视频音频转文字工具实测盘点

上个月部门季度复盘会开了快两个小时,录音文件扔在手机里一直没动。leader周三突然要一份会议纪要,我翻出那条录音,从头拖到尾整整听了两遍,边听边敲键盘,手指都快抽筋了。那一刻脑子里只剩一个念头:有没有…

2026/8/4 1:30:14 阅读更多 →
采购降本增效:战略寻源与数字化工具实践

采购降本增效:战略寻源与数字化工具实践

1. 采购降本增效的核心价值与挑战采购部门在企业运营中扮演着"成本阀门"的关键角色。根据行业调研数据,采购成本每降低1%,企业利润平均可提升5-8%。但现实中,超过60%的采购团队仍陷在"救火式"工作模式中——供应商交货延…

2026/8/4 1:29:14 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/3 4:58:13 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/3 1:53:31 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/3 4:36:35 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/3 13:07:03 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/3 5:19:38 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/3 8:27:36 阅读更多 →