描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。
数据范围:数据流中数个数满足 1 \le n \le 1000 \1≤n≤1000 ,大小满足 1 \le val \le 1000 \1≤val≤1000
进阶: 空间复杂度 O(n) \O(n) , 时间复杂度 O(nlogn) \O(nlogn)
分析: 根据题意获取数据流的中位数,由Insert()方法读取数据流,使用GetMedian()方法获取数据流的中位数,题目最后是同时导出这两个方法,也就是说这两个方法是每次都要执行的。
这题的难点在于理解题目的意思。由于没有给出存储数组流的数据,我们需要自己定义。
1, 我们需要一个数组来存储每次传入的变量
const arr = [];
2,Insert()方法中,将每次传入的数存储到arr数组中,做好排序,
function Insert(num)
{
arr.push(num);
arr.sort((a, b) => a -b);
}
3, 使用GetMedian()方法,读取中位数,如果数组长度是奇数,就直接取中位数。如果数组长度不是奇数,就中间两个数的平均值;
function GetMedian(){
const index = Math.floor(arr.length / 2)
if(arr.length % 2){//奇数
return arr[index];
}else{
return (arr[index] + arr[index-1]) / 2 ;
}
}