为了find一个未sorting数组的中位数,我们可以在n个元素的O(nlogn)时间内做一个小堆,然后我们可以逐一提取n / 2个元素来得到中位数。 但是这个方法需要O(nlogn)的时间。 我们可以用O(n)时间的某种方法做同样的事吗? 如果可以的话,请告诉或者提出一些方法。
可能重复: C中的滚动中值algorithm 鉴于整数是从数据stream中读取的。 查找以有效方式读取的元素的中位数。 解决方法我读过:我们可以使用左侧的最大堆来表示小于有效中值的元素,右侧的最小堆表示大于有效中值的元素。 在处理一个传入元素之后,堆中元素的数量最多相差1个元素。 当两个堆包含相同数量的元素时,我们将堆的根数据的平均值作为有效中值。 当堆不平衡时,我们从包含更多元素的堆的根部中select有效中位数。 但是,我们将如何构build一个最大堆和最小堆,即我们如何知道这里的有效中位数? 我认为我们会在max-heap中插入1个元素,然后在min-heap中插入下一个元素,以此类推所有元素。 纠正我如果我在这里错了。