面试题目记录之 求数据流中位数,求单项链表长度(考虑有环), 判断是否为平衡二叉树

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 是慢指针第一次相遇点到环终点的距离。 那么也就意味着,

<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值