1.维持两个堆,一个大顶堆A,一个小顶堆B,大顶堆存储着小的数,小顶堆存储着大的数
2.每次插入,先插入A,再把A的最大数插进B,如果发现A比B的数字个数小,把B的顶部插进A
class MedianFinder {
priority_queue<long> small, large;
public:
void addNum(int num) {
small.push(num);
large.push(-small.top());
small.pop();
if (small.size() < large.size()) {
small.push(-large.top());
large.pop();
}
}
double findMedian() {
return small.size() > large.size()
? small.top()
: (small.top() - large.top()) / 2.0;
}
};