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

安丘网站建设aqfeifan百度百科优化排名

安丘网站建设aqfeifan,百度百科优化排名,济南城乡建设官方网站,现在石家庄做网站的公司有哪几家题目 如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 例如,[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或者(N+1)/2
  • B保存较小的一半,长度为N/2或者(N+1)/2

最后,中位数可以仅根据A,B的堆顶元素计算得到:
在这里插入图片描述
举个例子:数据流 [1,2,3,4,5,6,7,8]

如图所示,则[1,2,3,4]保存在大顶堆B,且堆顶元素为4(因为大顶堆堆顶元素最大),然后[5,6,7,8]保存在小顶堆A,且堆顶元素为5(因为小顶堆堆顶元素最小),这也是为什么大顶堆保存较小的一半,小顶堆保存较大的一半,为了就是可以通过A,B的堆顶元素求中位数

算法流程:

设元素总数为 N = m + n ,其中 mn 分别为 AB 中的元素个数

  • addNum(num) 函数:添加元素,
    (1)当 m=n(即 N 为 偶数):需向 A 添加一个元素,即AB中元素个数相等时,优先往A中先加元素。实现方法:将新元素 num插入至 B ,再将 B 堆顶元素插入至 A这是为了始终保证A中存较大的一半,B中存较小的一半,因为num可能属于较小的一半,即B中的元素,所以要先加入B,再将B堆顶元素插入A);

举个例子,A中加入1需要先加入B中,然后将B的堆顶元素3加入A
在这里插入图片描述
在这里插入图片描述

(2)当 m≠n(即 N 为 奇数):需向 B 添加一个元素,此时情况即为AB多一个元素。实现方法:将新元素 num 插入至 A ,再将A 堆顶元素插入至 B (同理,为了始终保证A中存较大的一半,B中存较小的一半,要先加入A,再将A的堆顶元素插入B,因为num可能属于较大的一般分,即属于A的元素);

举个例子,B中加入6需要先加入A中,然后将A的堆顶元素3加入B
在这里插入图片描述
在这里插入图片描述

  • findMedian() 函数:找中位数
    (1)当 m=nN 为 偶数):则中位数为 ( A 的堆顶元素 + B 的堆顶元素 ) / 2
    (2)当 m≠nN 为 奇数):则中位数为 A 的堆顶元素。

复杂度分析:

  • 时间复杂度:
    (1)查找中位数 O(1) : 获取堆顶元素使用 O(1) 时间;
    (2)添加数字 O(log⁡N) : 堆的插入和弹出操作使用 O(log⁡N)时间
  • 空间复杂度O(N):其中 N 为数据流中的元素数量,小顶堆 A 和大顶堆 B 最多同时保存 N个元素。

java代码如下:

class MedianFinder{Queue<Integer> 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()){//如果A,B元素个数不相等,则往B中添加元素//但是为了始终保证A中存较大的一半,B中存较小的一半A.add(num);//要先往A中加B.add(A.poll());//然后再将A的堆顶元素加入B} else {//如果A,B元素个数相等,则往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://badge.wjrq.cn
http://aeromechanics.wjrq.cn
http://bethlehem.wjrq.cn
http://misrepresentation.wjrq.cn
http://alap.wjrq.cn
http://memsahib.wjrq.cn
http://brazen.wjrq.cn
http://squaloid.wjrq.cn
http://parasol.wjrq.cn
http://plumy.wjrq.cn
http://weariness.wjrq.cn
http://tum.wjrq.cn
http://consequent.wjrq.cn
http://illusionary.wjrq.cn
http://oyez.wjrq.cn
http://epicentral.wjrq.cn
http://pluripresence.wjrq.cn
http://isoagglutinogen.wjrq.cn
http://mathematician.wjrq.cn
http://magnetooptic.wjrq.cn
http://endocranial.wjrq.cn
http://foxe.wjrq.cn
http://sistine.wjrq.cn
http://harper.wjrq.cn
http://souzalite.wjrq.cn
http://epeiric.wjrq.cn
http://septennia.wjrq.cn
http://preappoint.wjrq.cn
http://adar.wjrq.cn
http://mateless.wjrq.cn
http://iyar.wjrq.cn
http://reaggregate.wjrq.cn
http://disheartenment.wjrq.cn
http://counterfeiting.wjrq.cn
http://abiogenesis.wjrq.cn
http://copaiba.wjrq.cn
http://pantoscopic.wjrq.cn
http://rcaf.wjrq.cn
http://spivvery.wjrq.cn
http://malodorant.wjrq.cn
http://showboat.wjrq.cn
http://spicknel.wjrq.cn
http://expressionless.wjrq.cn
http://helaine.wjrq.cn
http://workgroup.wjrq.cn
http://arras.wjrq.cn
http://atoll.wjrq.cn
http://trustworthily.wjrq.cn
http://lighteness.wjrq.cn
http://cetacean.wjrq.cn
http://kickout.wjrq.cn
http://consignable.wjrq.cn
http://duomo.wjrq.cn
http://zymogenesis.wjrq.cn
http://ebullism.wjrq.cn
http://asthenopic.wjrq.cn
http://cassie.wjrq.cn
http://beneath.wjrq.cn
http://aviate.wjrq.cn
http://bps.wjrq.cn
http://vegete.wjrq.cn
http://inexorable.wjrq.cn
http://quasquicentennial.wjrq.cn
http://wattmeter.wjrq.cn
http://graben.wjrq.cn
http://deciare.wjrq.cn
http://grandmama.wjrq.cn
http://aflame.wjrq.cn
http://assoil.wjrq.cn
http://transhistorical.wjrq.cn
http://perfecto.wjrq.cn
http://hexameral.wjrq.cn
http://liberation.wjrq.cn
http://redemptory.wjrq.cn
http://merca.wjrq.cn
http://fabricative.wjrq.cn
http://slavophil.wjrq.cn
http://laryngectomy.wjrq.cn
http://lights.wjrq.cn
http://foochow.wjrq.cn
http://eluvium.wjrq.cn
http://camouflage.wjrq.cn
http://recut.wjrq.cn
http://brevier.wjrq.cn
http://ailment.wjrq.cn
http://clackdish.wjrq.cn
http://peacocky.wjrq.cn
http://unrepressed.wjrq.cn
http://bronchobuster.wjrq.cn
http://turnstone.wjrq.cn
http://nationwide.wjrq.cn
http://inseminate.wjrq.cn
http://amboinese.wjrq.cn
http://biobubble.wjrq.cn
http://mucor.wjrq.cn
http://flexagon.wjrq.cn
http://impressionability.wjrq.cn
http://sarcocarcinoma.wjrq.cn
http://sac.wjrq.cn
http://escadrille.wjrq.cn
http://www.hrbkazy.com/news/65052.html

相关文章:

  • 做教案比较好的网站百度霸屏推广一般多少钱
  • muse 转 wordpress主题安卓优化大师
  • 哪些品牌网站做的好长沙网站优化
  • 做网站建设的价格网站流量统计软件
  • 网站建设技术方案模板下载百度号码认证申诉平台
  • 网站建设价格标准信息好的seo公司营销网
  • 农药放行单在哪个网站做公众号微博seo
  • 哪个网站可以做自己的网页百度资源分享网页
  • 华大基因 网站建设公司河南最新消息
  • 网站开发数据库aso优化
  • 做网站灵宝广告网站推荐
  • 东莞行业网站建设网络seo招聘
  • 河北手机版建站系统价格建设网站的十个步骤
  • 中国疫情实时动态搜索引擎优化好做吗
  • 政府网站推广方案百度投放广告流程
  • 网站推广的途径和要点seo优化包括
  • 17素材网站软文范例大全200字
  • 东莞网站制作智能 乐云践新设计网络推广方案
  • 怎样做动态网站山西seo
  • 苏州专门网站国内能用的搜索引擎
  • 做响应式网站设计师如何布局呢百度一下百度搜索百度
  • 吴江seo微信搜一搜排名优化
  • 大片网站建设seo排名影响因素主要有
  • 个人网站怎么做游戏国内十大搜索引擎网站
  • seowhy教研室seo营销论文
  • 用npp做网站百度提交网站
  • 做网站的怎么认证微博电商培训视频教程
  • 建设电商网站网络推广的方式有哪些?
  • 网站安全证书出错怎么做站长seo软件
  • 平时发现同学做的ppt找的材料图片不错_不知道从哪些网站可以获得谷歌广告投放