基本思路:
- 中位数是数组最中间的一个或两个元素,所以考虑直接将数组分为两部分,左边部分取最大值,右边部分取最小值,这种要求可以用堆(优先队列)满足。
- 如果数组元素个数为奇数,只需要取一个数,所以事先约定左边部分的元素个数一定大于右边部分,这样在数组元素个数为奇数时一直取左边部分的最大值。
class Solution {
public:
priority_queue<int, vector<int>, less<int>> smaller;
priority_queue<int, vector<int>, greater<int>> bigger;
void Insert(int num) {
smaller.push(num);
bigger.push(smaller.top());
smaller.pop();
if (smaller.size() < bigger.size()) {
smaller.push(bigger.top());
bigger.pop();
}
}
double GetMedian() {
if (smaller.size() == bigger.size()) {
return ((double)smaller.top() + bigger.top()) / 2;
}
return (double)smaller.top();
}
};

京公网安备 11010502036488号