1.トピック
データ・ストリームの中央値を取得する方法?数値が奇数データストリームから読み込まれた場合、中央値は、ソート後のすべての値の中央に位置しています。偶数値は、データストリームから読み出された場合、中央値は、注文の全ての中間値の後に2つの数の平均値です。私たちは、読み込まれ、現在の中央値のデータを取得するためにGetMedian()メソッドを使用して、データ・ストリームを読み取るために挿入()メソッドを使用します。
2.私の問題の解決
- 大きな使ってヒープのトップ
left
小さな半分の数字の保存、ヒープが大きいトップright
大きな半分の数字を保持します。 - 挿入され挿入されるスタックのかを決定します。
- 2つのヒープサイズ差以上でないことを確認してください
1
同じサイズでない場合は、それほど大きく最優先ヒープが大きく左;
class Solution {
priority_queue<int,vector<int>,less<int> > left;//大顶堆
priority_queue<int,vector<int>,greater<int> >right;//小顶堆
public:
void Insert(int num)
{
if(left.empty() || num<left.top())left.push(num);
else right.push(num);
if(left.size()>right.size()+1){
right.push(left.top());
left.pop();
}
if(right.size()>left.size()){
left.push(right.top());
right.pop();
}
}
double GetMedian()
{
if(left.empty() && right.empty())return 0;
if(left.size()==right.size()+1)return left.top();
return 0.5 * (left.top()+right.top());
}
};
3.誰か他の人の問題解決
4.まとめとリフレクション
(1)C++
でpriority_queue<int,vector< int >,less< int > >
、デフォルトのヒープビッグトップ
priority_queue<int,vector< int >,greater< int > >
の小さな山の頂上。