1. 求数据流中位数
对于固定长度数组,求中位数可以考虑 快排的思想, 以及最大堆,最小堆。
对于数据流,最大堆最小堆比较直观。需要注意的是要保证最大堆和最小堆的size一致(差不能大于1).
2. 单项链表长度
https://www.cnblogs.com/xudong-bupt/p/3667729.html
1. 无环,直接判断 phead == None.
2. 有环。设两个指针,一个快(步长为2),一个慢(步长为1)。 两个指针会在环中相遇,此为第一次相遇。
假设此时,慢指针走过的链表个数为 x. 且易知, 慢指针此时必定还没有完成链表的一次遍历。假设,此时,慢指针的位置,距离环首的距离为y
但此时,并无法判断出是在环中的什么位置相遇,也无法知道链表长度。
接着,快指针固定不动,慢指针往前走,第二次相遇时,走过的步长,即为环的长度,设为 c。
则有等式: l1 + y = x
l1 + n*c + y = 2*x
所以 (n+1)*c = x
所以 l1 = x-y = (n+1)*c -y = n*c + c-y c-y 是慢指针第一次相遇点到环终点的距离。 那么也就意味着,
<