弗洛伊德算法--判圈法寻找环的入口O(n) O(1)

第一阶段:找相遇

初始:slow = 0, fast = 0

走一步:slow = nums0 = 2, fast = numsnums\[0] = nums2 = 1

走两步:slow = nums2 = 1, fast = numsnums\[1] = nums3 = 4

走三步:slow = nums1 = 3, fast = numsnums\[4] = nums2 = 1

走四步:slow = nums3 = 4, fast = numsnums\[1] = nums3 = 4

停!slow == fast == 4,在数字 4 这里相遇了!

第二阶段:找入口

把 slow 扔回起点:slow = 0, fast 留在 4。

接下来两人都走一步:

slow = nums0 = 2

fast = nums4 = 2

一看,slow == fast == 2。两人在 2 相遇了!

return slow; 返回 2。

你回头看你的图,2 是不是正好就是你画的圈的入口? 是不是就是那个重复数?

完全对上了对不对!

现在,去把这段代码复制到你自己的编译器里,自己手敲一遍,你一定能彻底拿下这道题!

do {

slow = numsslow; // 慢指针走一步

fast = numsnums\[fast]; // 快指针走两步

} while (slow != fast);

相关推荐
NEFU_Jyj1 小时前
贝尔数(组合数学)
算法
1-1=02 小时前
C# 数据结构和特殊类型
数据结构·c#·.net·.netcore
希和20272 小时前
C语言程序设计题|有序数组插入数字冒泡排序
c语言·数据结构·算法
Pniubi2 小时前
力扣73 矩阵置零
算法·leetcode·矩阵
布莱克60512 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
D e re k ZH15 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
石小石Orz16 小时前
AI 正在蚕食我们的编码能力
前端·后端·算法
民乐团扒谱机18 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
青少儿编程课堂18 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:中缀表达式求值解析
c++·python·算法·bfs·信息学竞赛