链接:https://leetcode-cn.com/problems/find-median-from-data-stream/
两个优先级队列,分别存放数据流大的一半的数与小的一般的数。
C++代码:
class MedianFinder {
public:
/** initialize your data structure here. */
priority_queue < int , vector<int> ,less<int> > max_heap;//从大到小
priority_queue < int , vector<int>, greater<int> > min_heap; //从小到大,需要vector
MedianFinder() {
}
void addNum(int num) {
max_heap.push(num); // Add to max heap
min_heap.push(max_heap.top()); // balancing step
max_heap.pop();
if (max_heap.size() < min_heap.size()) { // maintain size property
max_heap.push(min_heap.top());
min_heap.pop();
}
}
double findMedian() {
if(max_heap.size()>min_heap.size())
return (double)max_heap.top();
else if(min_heap.size()>max_heap.size())
return (double)min_heap.top();
else
return ((double)max_heap.top()+(double)min_heap.top())/2.0;
}
};