题目描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。
思路
/**
* 思路: 插入的时候保持排序好之后插入,就可以很方便的找到中位数
*/
class Solution {
public:
vector<int> dataflow;
void Insert(int num)
{
int len = dataflow.size();
if(len == 0){
dataflow.push_back(num);
}
else{
if(num < dataflow[0]){
dataflow.insert(dataflow.begin(),num);
return;
}
for(int i = 1; i < len; i++){
if(num >= dataflow[i-1] && num <= dataflow[i]){
dataflow.insert(dataflow.begin()+i,num);
return;
}
}
dataflow.insert(dataflow.end(),num);
}
return;
}
double GetMedian()
{
int len = dataflow.size();
if(len == 0) return 0;
if(len%2 == 0){
return ((double)dataflow[len/2-1]+(double)dataflow[len/2])/2.0;
}else{
return (double)dataflow[len/2];
}
}
};