BM48 数据流中的中位数

描述
如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用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 ;
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值