题目:
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用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 };
我的笔记:
选择使用选择排序法,对每个数字流中的数字进行排序,后将排序后的数组中的中位数输出,偶数位则输出前后平均数,奇数位则直接输出。