当前位置: 首页 > news >正文

普拓网站建设郑州网站制作_郑州网页制作_做网站设计_河南网站制作网

普拓网站建设,郑州网站制作_郑州网页制作_做网站设计_河南网站制作网,南皮县建设局网站,网站瀑布流怎么做题目 如何得到一个数据流中的中位数#xff1f;如果从数据流中读出奇数个数值#xff0c;那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值#xff0c;那么中位数就是所有数值排序之后中间两个数的平均值。 例如#xff0c;[2,3,4] 的中位数是…题目 如何得到一个数据流中的中位数如果从数据流中读出奇数个数值那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值那么中位数就是所有数值排序之后中间两个数的平均值。 例如[2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 3) / 2 2.5 设计一个支持以下两种操作的数据结构 void addNum(int num) - 从数据流中添加一个整数到数据结构中。 double findMedian() -返回目前所有元素的中位数。 思路 优先队列 / 堆 给定一长度为 N 的无序数组其中位数的计算方法首先对数组执行排序使用 O(Nlog⁡N)时间然后返回中间元素即可使用 O(1) 时间 本题可以根据上述思想将数据流保存在一个列表中并在添加元素时保持数组有序给定一长度为 N 的无序数组其中位数的计算方法首先对数组执行排序使用 O(Nlog⁡N) 时间然后返回中间元素即可使用 O(1)时间 借助 堆 进行优化时间复杂度 建立两个堆一个小顶堆A一个大顶堆B各自保存列表的一半元素 其中 A保存较大的一半长度为N/2或者N1/2B保存较小的一半长度为N/2或者N1/2 最后中位数可以仅根据A,B的堆顶元素计算得到 举个例子数据流 [12345678] 如图所示则[1234]保存在大顶堆B且堆顶元素为4因为大顶堆堆顶元素最大然后[5678]保存在小顶堆A且堆顶元素为5因为小顶堆堆顶元素最小这也是为什么大顶堆保存较小的一半小顶堆保存较大的一半为了就是可以通过A,B的堆顶元素求中位数 算法流程 设元素总数为 N m n 其中 m 和 n 分别为 A 和 B 中的元素个数 addNum(num) 函数添加元素 1当 mn即 N 为 偶数需向 A 添加一个元素即A和B中元素个数相等时优先往A中先加元素。实现方法将新元素 num插入至 B 再将 B 堆顶元素插入至 A 这是为了始终保证A中存较大的一半B中存较小的一半因为num可能属于较小的一半即B中的元素所以要先加入B再将B堆顶元素插入A 举个例子A中加入1需要先加入B中然后将B的堆顶元素3加入A 2当 m≠n即 N 为 奇数需向 B 添加一个元素此时情况即为A比B多一个元素。实现方法将新元素 num 插入至 A 再将A 堆顶元素插入至 B 同理为了始终保证A中存较大的一半B中存较小的一半要先加入A再将A的堆顶元素插入B因为num可能属于较大的一般分即属于A的元素 举个例子B中加入6需要先加入A中然后将A的堆顶元素3加入B findMedian() 函数找中位数 1当 mn N 为 偶数则中位数为 ( A 的堆顶元素 B 的堆顶元素 ) / 2 2当 m≠n N 为 奇数则中位数为 A 的堆顶元素。 复杂度分析 时间复杂度 1查找中位数 O(1) 获取堆顶元素使用 O(1) 时间 2添加数字 O(log⁡N) 堆的插入和弹出操作使用 O(log⁡N)时间空间复杂度O(N)其中 N 为数据流中的元素数量小顶堆 A 和大顶堆 B 最多同时保存 N个元素。 java代码如下 class MedianFinder{QueueInteger A,B;public MedianFinder() {A new PriorityQueue();//java默认小顶堆保存较大的一半B new PriorityQueue((x,y) - (y - x));//使用降序定义大顶堆因为大顶堆堆顶元素最大所以是降序但是用于升序排序因为每次出堆顶元素是最大的保存较小的一半}public void addNum(int num){if(A.size() ! B.size()){//如果AB元素个数不相等则往B中添加元素//但是为了始终保证A中存较大的一半B中存较小的一半A.add(num);//要先往A中加B.add(A.poll());//然后再将A的堆顶元素加入B} else {//如果AB元素个数相等则往A中添加元素//同理为了始终保证A中存较大的一半B中存较小的一半B.add(num);A.add(B.poll());//要先往B中加//然后再将B的堆顶元素加入A}}public double findMedian(){return A.size() ! B.size() ? A.peek() : (A.peek() B.peek()) / 2.0;} }
http://www.hkea.cn/news/14471555/

相关文章:

  • 程序员 做 个人网站短链生成网站
  • 分类信息网站系统国内wordpress例子
  • 安阳网站建设哪家好开一个软件开发公司需要多少钱
  • 网站制作大型公司房产信息网510
  • 装潢设计培训班学费多少钱seo搜索引擎优化书籍
  • 田贝网站建设汇算清缴在哪个网站上做
  • 自己做发小说网站app下载汅api免费安卓
  • 网站源码上传到空间以后怎么做观澜网站建设公司
  • mc建筑网站wordpress 众筹中文
  • wordpress 手机网站支付华竣国际的展厅设计公司
  • 延边州建设局网站企云网站建设
  • 广阳区建设局网站设置网站关键词怎么做
  • 珠海网站建设尚古道策略西安都蓝网站建设
  • 如何提高网站的排名男人直接做的视频网站
  • 可以做进销存的网站系统工程建设管理
  • 微信公众平台做微网站吗我的世界怎么做赞助网站
  • 做一个网站开发项目有哪些阶段电子商务网页设计论文
  • 游仙移动网站建设长春网长春网站设计站建设
  • 智能模板网站建设方案棒的网页设计
  • 中国建设造价协会网站网页制作最常用的软件
  • 北京做网站便宜的公司哪家好自己做网站类型
  • 网站开发数据接口如何利用长宁制作网站
  • 南京米雅途做网站如何网站开发询价方案
  • 织梦网站做站群wordpress可以建网站吗
  • dede网站经常被挂马 怎么办深圳建设厅官网
  • 网站开发与系统开发江安网站建设
  • 个人网站怎么建设步骤成都哪家做网站好
  • 伪静态规则变动对网站的影响商城源码哪家品牌好
  • 免费发布信息的网站企业网d1net的功能
  • 潍坊做电商的网站建设手机网站怎么布局