快慢指针寻找链表环就快指针速度的疑问

来源:1-4 如何回答算法面试问题

甲骨文_0001

2021-11-04

老师,在一个链表中,两个指针同时同地出发,慢指针每次移动一步,快指针每次移动2步,当快指针下次碰到慢指针的时候说明链表存在环,能理解。就是快指针每次移动2步,那快指针每次移动3步,或4,5步可以吗 能够发生快指针后面会碰上慢指针的情况吗:)

写回答

1回答

liuyubobobo

2021-11-05

是的,快指针移动任意步都会碰到。


证明稍微有些复杂,需要一定的数论知识了,你要是有兴趣,在研究明白为什么快指针的速度是 2 的情况下,能相遇,在这个基础上,可以尝试证明把 2 修改成任意 k。


但是,快指针的移动次数是 2,首先模拟起来更简单,其次,他们相遇的时间会更短。

(最差的时间复杂度肯定是 O(n)的,n 是链表中的节点个数。但如果快指针速度很大,很有可能在环中兜非常多的圈。可以用极限思维去想,如果快指针的速度是 v = 10000000,此时,快指针的速度成为了算法性能的主导向,而非链表中的节点个数。在最差情况下,将按照这个速度,对环中的每一个点都遍历一遍,复杂度成为了 O(vn)。这不是严格证明,但可以直观看到可能的结果。)


继续加油!:)

1
1
甲骨文_0001
谢谢老师:)
2021-11-05
共1条回复

玩转算法面试-- Leetcode真题分门别类讲解

课程配套大量BAT面试真题,高频算法题解析,强化训练

7408 学习 · 1150 问题

查看课程