http://www.lintcode.com/en/problem/data-stream-median/
数据流的中位数,两个优先队列,或者两个堆,题目定义是靠前的一个数为median
struct Node1{
int val;
bool operator<(Node1 n) const{
return val<n.val;
}
};
struct Node2{
int val;
bool operator<(Node2 n) const{
return val>n.val;
}
};
class Solution {
public:
/**
* @param nums: A list of integers.
* @return: The median of numbers
*/
vector<int> medianII(vector<int> &n) {
priority_queue<Node1> pq1;//max
priority_queue<Node2> pq2;//min
int median=INT_MIN;
vector<int> ans;
for(auto e: n){
if(pq1.size()==pq2.size()){
if(median==INT_MIN) median=e;
else if(median<=e) pq2.push({e});
else {
pq2.push({median});
pq1.push({e});
median=pq1.top().val;
pq1.pop();
}
} else{
if(median<=e){
pq1.push({median});
pq2.push({e});
median=pq2.top().val;
pq2.pop();
} else pq1.push({e});
}
ans.push_back(median);
}
return ans;
}
};