排序算法相关

133 阅读1分钟

295.数据流的中位数

常规思想: 直接一个数组,中位数就是数组长度的中间值。那么查找中位数的时间复杂度就为o(1),增加每个数的复杂度就为o(n),因为要移动数组。

优化: 不要用一整个数组,而是用两个数组存储。因为我们只需要最接近中间的两个数,所以用一个大根堆和一个小根堆就可以解决问题。 left用大根堆,right用小根堆,堆顶元素就是最靠近中位数的值。

堆可以用优先队列api:

priority_queue<int, vector<int>, less<int>> big_heap//大根堆

priority_queue<int, vector<int>, greater<int>> small_heap//小根堆

需要注意的是, 默认是大根堆,里面是less,方便记忆。 具体涉及到底层堆堆实现,底层堆进行调整的时候先比较 son < son + 1, dad < son则交换,那么选择小于号的结果就是将最大的元素置换了上来,那么此堆就为大根堆。