数据流的中位数
class MedianFinder {
public:
/** initialize your data structure here. */
MedianFinder() {
}
//使用最大堆和最小堆的辅助
void addNum(int num) {
//保持中位数
if (zuixiaodui.empty() || zuixiaodui.top() < num)
{
zuixiaodui.push(num);
}
else
zuidadui.push(num);
if (zuidadui.size() == (zuixiaodui.size() + 1))
{
int temp = zuidadui.top();
zuidadui.pop();
zuixiaodui.push(temp);
}
if ((zuixiaodui.size() - zuidadui.size())==2)
{
int temp = zuixiaodui.top();
zuixiaodui.pop();
zuidadui.push(temp);
}
}
double findMedian() {
double result;
if (zuixiaodui.size() == zuidadui.size())
{
result = (zuixiaodui.top() + zuidadui.top()) * 1.0 / 2;
}
else if (zuixiaodui.size() == (zuidadui.size() + 1))
result = zuixiaodui.top();
return result;
}
//最小堆
priority_queue<int, vector<int>, greater<int>> zuixiaodui;
priority_queue<int, vector<int>> zuidadui;
};
/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/