https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1?tpId=13&tqId=11216&tPage=4&rp=4&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking
题意:
每次输入一个数字,输出当前数据流的中位数。
我也给出了main函数,含义就是类似的就是main函数中的例子。
#include<bits/stdc++.h> //记住这句话,能够包含所有头文件
using namespace std;
class Solution {
public:
priority_queue<int, vector<int>, less<int> > p;
priority_queue<int, vector<int>, greater<int> > q;
// 一边一半,方法棒,平衡,差值不能为2
void Insert(int num)
{
if(p.size() == 0 && q.size() == 0) {
p.push(num);
return ;
}
if(p.top() > num){
p.push(num);
}
else{
q.push(num);
}
if(p.size() + 2 == q.size()){
p.push(q.top());
q.pop();
}
if(q.size() + 2 == p.size()){
q.push(p.top());
p.pop();
}
}
double GetMedian()
{
if((p.size()+q.size())%2 == 0){
return double((p.top()+q.top())/2.0);
}
else if(p.size()>q.size())
return p.top();
else
return q.top();
}
};
int main(){
Solution s;
int t = 0;
while(t < 1){
s.Insert(t);
cout<<s.GetMedian()<<endl;
t++;
}
}