数据流中的中位数
题解方法
- 优先队列
优先队列
使用两个优先队列 $maxQueue$ 和 $minQueue$ 分别记录大于中位数的数和小于等于中位数的数。
当累计添加的数的数量为奇数时,$minQueue$ 中的数比 $maxQueue$ 多一个,此时中位数为 $minQueue$ 的队头;当累计添加的数的数量为偶数时,两个优先队列中的数的数量相同,此时中位数为它们的队头的平均值。
核心代码
优先队列
1 | public void addNum(int num) { |
使用两个优先队列 $maxQueue$ 和 $minQueue$ 分别记录大于中位数的数和小于等于中位数的数。
当累计添加的数的数量为奇数时,$minQueue$ 中的数比 $maxQueue$ 多一个,此时中位数为 $minQueue$ 的队头;当累计添加的数的数量为偶数时,两个优先队列中的数的数量相同,此时中位数为它们的队头的平均值。
1 | public void addNum(int num) { |