0%

295. Find Median from Data Stream

295. Find Median from Data Stream295. Find Median from Data Stream

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class MedianFinder {
public:
/** initialize your data structure here. */
MedianFinder() {

}

void addNum(int num) {
if(even)
{
large.push(num);
small.push(large.top());
large.pop();
}else
{
small.push(num);
large.push(small.top());
small.pop();
}
even = !even;
}

double findMedian() {
if(even)
return static_cast<double>((small.top() + large.top())) / 2;
else
return small.top();
}
private:
priority_queue<int> small;
priority_queue<int, vector<int>, std::greater<int>> large;
bool even = true;
};

/**
* Your MedianFinder object will be instantiated and called as such:
* MedianFinder* obj = new MedianFinder();
* obj->addNum(num);
* double param_2 = obj->findMedian();
*/

small存放小的一半,large存放大的一半,保证small的大小永远等于large.size()large.size() + 1