维护一个最大堆和一个最小堆, 首先先将前两个元素中较大的加入最小
堆,较小的加入最大堆。然后每次添加新元素的时候,先将其与最大堆和最小堆的堆顶进行对比,
如果其大于最小堆堆顶则插入最小堆,如果其小于最大堆堆顶则插入最大堆,否则选择元素数量
较小的一堆。 在插入与向上调整结束后, 如果两堆的元素数量差大于 1(即为 2),则从元素数量
较多的一堆中取出堆顶插入另一堆,两堆相应进行向下向上调整,这样可以保证两堆元素数量始
终是平衡的。 在这种情况下,选取中位数只需要选取元素数量多 1 的一堆的堆顶,或者两堆元素
数量相同的时候选择两堆堆顶的平均数即可。

通过维护一个最大堆和一个最小堆,动态插入元素并保持堆平衡,实现寻找中位数。当元素数量差超过1时,调整堆以保持平衡。在大量数据(n>>k)中,找到最大k个数,可以采用建立大小为k的最小堆或先取前k个数据排序再归并的方法,时间复杂度近似为O(n)。
最低0.47元/天 解锁文章
500

被折叠的 条评论
为什么被折叠?



