剑指offer 数据流中的中位数

题目:

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。

代码:

 1 class Solution {
 2 public:
 3     vector<int> list;
 4     void Insert(int num) {
 5         int length = list.size(), i = 0;
 6         for(; i < length; i ++)
 7             if(list[i] > num) {
 8                 list.insert(list.begin()+i,num);
 9                 break;
10             }
11         if( i == length )
12             list.push_back(num);
13     }
14 
15     double GetMedian() { 
16         int length = list.size();
17         int mid = length >> 1;
18         if(length & 1)
19             return list[mid];
20         else
21             return (list[mid] + list[mid-1]) / 2;
22     }
23 };

我的笔记:

  选择使用选择排序法,对每个数字流中的数字进行排序,后将排序后的数组中的中位数输出,偶数位则输出前后平均数,奇数位则直接输出。

posted @ 2020-06-16 15:12  John_yan15  阅读(130)  评论(0编辑  收藏  举报