295. 数据流的中位数

 1 class MedianFinder 
 2 {
 3     priority_queue<int,vector<int>,greater<int>> up;//小根堆
 4     priority_queue<int> down;//大根堆
 5 public:
 6     MedianFinder() {}
 7     
 8     void addNum(int num) //维护小根堆与大根堆相等或者比大根堆多1
 9     {
10         if(down.empty() || num >= down.top()) up.push(num);
11         else
12         {
13             down.push(num);
14             up.push(down.top());
15             down.pop();
16         }
17 
18         if(up.size() > down.size() + 1)
19         {
20             down.push(up.top());
21             up.pop();
22         }
23     }
24     
25     double findMedian() 
26     {
27         if(down.size() + up.size() & 1) return up.top();
28         else return (down.top() + up.top()) / 2.0;
29     }
30 };

 

posted @ 2020-04-10 11:08  Jinxiaobo0509  阅读(109)  评论(0)    收藏  举报