标签:
十分简单
用数组或者向量做插排必然导致悲剧
想想移位都蛋疼
所以使用堆这种自带大小关系插入快的结构
使用大小顶堆插入管理数集的左右两块即可
这样的话每次插入基本是O(log(n))
每次中值是O(1)
问题不大
class MedianFinder
{
public:
void addNum(int num)
{
maxH.push(num);
if (minH.empty() || (!maxH.empty() && minH.top() < maxH.top()) || maxH.size() > minH.size())
{
minH.push(maxH.top());
maxH.pop();
}
if (minH.size() - 1 > maxH.size())
{
maxH.push(minH.top());
minH.pop();
}
}
double findMedian()
{
if (minH.size() == maxH.size())
{
return double(minH.top() + maxH.top()) / 2.0;
}
else
{
return minH.top();
}
}
private:
priority_queue<int, vector<int>, greater<int>> minH;
priority_queue<int> maxH;
};
标签:
原文地址:http://www.cnblogs.com/ocNflag/p/5080031.html