当前位置: 首页 > 编程日记 > 正文

leetcode-295 数据流的中位数

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。

例如,
[2,3,4] 的中位数是 3
[2,3] 的中位数是 (2 + 3) / 2 = 2.5

设计一个支持以下两种操作的数据结构:
void addNum(int num) - 从数据流中添加一个整数到数据结构中。
double findMedian() - 返回目前所有元素的中位数。
示例:

addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3)
findMedian() -> 2

针对该问题,由于数组是动态增加的,我们使用传统的查找中位数的方式为:有序数组取中间两位(奇数个数字,取中间一位数字;偶数个数字,取中间两个数字的平均值),那么每次我们增加一个数字就需要重新排序,代价太大

此时我们可以维护两个堆,最大堆存储较小元素,最小堆存储较大元素,且两个堆大小相差不能超过1;此时,我们仅需要每次调整两个堆的堆顶元素即可。

计算中位数时,根据两个堆各自的大小,分别取堆顶进行计算求值。该过程就是会出现重建堆较为耗时(O(nlogn))之外再没有需要消耗时间的地方了

实现如下:

class MedianFinder {
public:/** initialize your data structure here. */MedianFinder() { }void addNum(int num) {if (big_heap.empty()) {big_heap.push(num);} else {//当最大堆元素个数大于最小堆元素个数,此时需要向最小堆插入if(big_heap.size() > small_heap.size()) { //但是发现插入的元素 小于 最大堆的元素个数//规则是:最小堆堆顶元素一定大于最大堆的堆顶,所以需要调整最大堆堆顶if (num < big_heap.top()) {small_heap.push(big_heap.top());big_heap.pop();big_heap.push(num);} else {small_heap.push(num);}} else {if (num > small_heap.top()) {big_heap.push(small_heap.top());small_heap.pop();small_heap.push(num);} else {big_heap.push(num);}}}}double findMedian() {if (big_heap.size() > small_heap.size()) {return big_heap.top();} else if (big_heap.size() == small_heap.size()) {return (double)(big_heap.top() + small_heap.top()) / 2.0;} else {return small_heap.top();}}
private:priority_queue<int, vector<int>, greater<int>> small_heap;priority_queue<int, vector<int>, less<int>> big_heap;
};

相关文章:

Servlet开发入门

Servlet是sun公司提供的一门用于开发动态web资源的技术。 Sun公司在其API中提供了一个servlet接口&#xff0c;用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据)&#xff0c;需要完成以下2个步骤&#xff1a; 编写一个Java类&#xff0c;实现servlet接口。把开…

#串口通信超时处理_简单通信协议

用C语言做物联网网关开发时&#xff0c;经常需要通过串口、485接口等从一些传感器读取数据&#xff0c;由于网关设备和传感器所处的环境复杂多样&#xff0c;电磁干扰等常常会破坏传输的数据&#xff0c;为了确保传输数据的可靠性&#xff0c;通常会采取一些策略&#xff0c;常…

在cmd的方式下,简化mysql的输入的方法

2019独角兽企业重金招聘Python工程师标准>>> 在我的电脑&#xff0c;高级系统设置&#xff0c;环境变量&#xff0c;path 添加运行的mysql.exe的路径。 转载于:https://my.oschina.net/u/779687/blog/140411

Parser Generator Tips翻译(中英对译) by Joshua Xu

You can use the ParserWizard command from the Project menu to help you create initial YACC and Lex skeleton source files.如果需要生成初始的YACC & Lex骨架源文件&#xff0c;可以在系统菜单中&#xff0c;选取Project->ParserWizard。Use the Parser Generato…

leetcode-455 分发饼干

假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。对每个孩子 i &#xff0c;都有一个胃口值 gi &#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j &#xff0c;都有一个尺寸 sj 。…

C++模板详解

参考&#xff1a;C 模板详解&#xff08;一&#xff09; 模板&#xff1a;对类型进行参数化的工具&#xff1b;通常有两种形式&#xff1a; 函数模板&#xff1a;仅参数类型不同&#xff1b;类模板&#xff1a; 仅数据成员和成员函数类型不同。目的&#xff1a;让程序员编写…

autocad2007二维图画法_cad怎样绘制简单的二维图形

CAD绘制二维图形非常的简单&#xff0c;大家经常用它来画图&#xff0c;下面是学习啦小编带来关于cad怎样绘制简单的二维图形的内容&#xff0c;希望可以让大家有所收获!cad绘制简单二维图形的方法1、绘图菜单绘图菜单是绘制图形最基本、最常用的方法&#xff0c;其中包含了Aut…

MyEclipse 中配置struts2.2.1的方法

MyEclipse中配置Struts2.2.1版本基本步骤&#xff1a;1&#xff0c;首先就是要建立一个web project项目2&#xff0c;设置jdk和servers路径&#xff0c;如果jdk和servers已经配置ok&#xff0c;跳过这一步骤。在菜单中的window选项中配置jdk和servers对于jdk&#xff0c;点击ja…

BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)

BZOJLOJ洛谷 \(d_i\)不同就不用说了&#xff0c;建出树来\(DFS\)一遍。 对于\(d_i\)不同的情况&#xff1a; Solution 1&#xff1a;xxy tql! 考虑如何把这些数依次填到树里。 首先对于已解锁的节点\(x\)&#xff08;已解锁是指父节点已经处理完的点&#xff0c;刚开始就是\(fa…

leetcode-376 摆动序列

如果连续数字之间的差严格地在正数和负数之间交替&#xff0c;则数字序列称为摆动序列。第一个差&#xff08;如果存在的话&#xff09;可能是正数或负数。少于两个元素的序列也是摆动序列。 例如&#xff0c; [1,7,4,9,2,5] 是一个摆动序列&#xff0c;因为差值 (6,-3,5,-7,3…

bootstrap3中关于布局的两种样式

container&#xff1a;用.container包裹的内容即可实现居中对齐。注意&#xff0c;由于在各分辨率下面都设置了padding 和 固定宽度&#xff0c;.container不能嵌套。row&#xff1a;栏栅系统是把父容器平均分为12列。注意&#xff0c;row可以被嵌套。 通过下表可以详细查看Boo…

adg oracle 架构_云化双活的架构演进,宁夏银行新核心搭载Oracle 19c投产上线

云和恩墨顺利完成宁夏银行新数据中心数据库平台的建设&#xff0c;包括新数据中心RAC搭建、DG搭建、旧数据中心到新数据中心的数据迁移&#xff0c;以及在整个项目生命周期中的实施规范、性能测试保障、压力测试等。6月12日&#xff0c;宁夏银行数据库完成全部迁移&#xff0c;…

MFC里ON_COMMAND_RANGE消息映射的ID问题

今天在工作中遇到一个问题&#xff0c;一个动态菜单&#xff0c;每个菜单的菜单项ID是我自己定义的&#xff0c;定义如下&#xff1a; #define IDM_SEARCHRECORD0 222240 #define IDM_SEARCHRECORD1 222241 #define IDM_SEARCHRECORD2 222242 #define IDM_SEARCHRECORD3 …

反射拷贝对象的思路:

0 根据构造器创建对象 1.获取传入进来的对象的字段 2.获取字段的类型 3.拼接 set 与get方法 4 获取传入进来的对象的值 并设置给新对象转载于:https://www.cnblogs.com/classmethond/p/10362263.html

leetcode-402 移掉K位数组

给定一个以字符串表示的非负整数 num&#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。 注意: num 的长度小于 10002 且 ≥ k。 num 不会包含任何前导零。 示例 1 : 输入: num “1432219”, k 3 输出: “1219” 解释: 移除掉三个数字 4, 3, 和 2形成一…

c++ using 前置声明_C++ 类的前置声明

今天在研究C”接口与实现分离“的时候遇到了一个问题&#xff0c;看似很小&#xff0c;然后背后的东西确值得让人深思&#xff01;感觉在学习的过程中有太多的为什么&#xff0c;而每一个为什么背后都隐藏着一些原理和目的&#xff0c;所以得多问自己”为什么“&#xff0c;这样…

测试用的序列化方法

对于实体&#xff0c;进行底层方法测试的时候&#xff0c;经常逐一赋值很麻烦&#xff0c;网上找到序列化xml方法&#xff0c;感觉挺好用的。 前端调用方法时&#xff0c;将实体序列化写入xml文件 //xml路径string filePath "D:\1.xml";using (System.IO.StreamWrit…

HighChart学习-更新数据data Series与重绘

一&#xff1a;HighChart介绍 基于JQuery的纯JavaScript的图标库&#xff0c;支持各种图表显示&#xff0c;同时还支持Mootools 与Prototype详细版本支持在这里&#xff1a; JQuery 1.3.2 - 1.9.x. 2.0.x for modern browsers Mootools 1.2.5 - 1.4.5 Prototype 1.7 支持目…

shell代码模板

批量ssh登录机器#site_search_hosts 10.4.16.205,10.4.20.87,10.4.20.88,10.4.20.89,10.4.20.90,10.4.20.92,10.4.20.93,10.4.21.51,10.4.21.52,10.4.21.53,10.4.21.54,10.4.33.136,10.4.33.137,10.4.33.138,10.4.33.139,10.4.33.140site_search_hosts10.4.16.205,10.4.20.87,1…

leetcode-55 跳跃游戏

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步&#xff0c;从位置 0 到达 位置 1, 然后再从位置 1…

子分类账知识学习(汇总网上比较有用的资料)

子模块和GL之间关联的变化 12i在功能模块上的变化很多&#xff0c;比如&#xff0c;基本每个模块都启用了MOAC特性&#xff0c;新增加了子帐模块&#xff0c;税模块等等很多新的模块&#xff0c;OPM库存和离散库存集成了。不过这些变化中&#xff0c;大部分不是我们需要重点…

zynqpl端时钟_第十一章 ZYNQ-MIZ701 PS读写PL端BRAM

本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享&#xff0c;通过zynq PS端的Master GP0端口向BRAM写数据&#xff0c;然后再通过PS端的Mater GP1把数据读出来&#xff0c;将结果打印输出到串口终端显示。涉及到AXI BRAM Controller 和 Block Memery Generato…

nagios报警的问题

最近我写了关于naigos监控的安装与配置的技术文档&#xff0c;公司运维按照我的文档部署naigos&#xff0c;发现不能发送报警邮件&#xff0c;经过我的检查&#xff0c;发现问题如下&#xff1a;1、hosts里的配置[rootnagios ~]# cat /etc/hosts # Do not remove the followin…

机器学习常见的分类算法的优缺点

1. 前言 在机器学习中&#xff0c;种类最多的一类算法要属很类算法&#xff0c;本文对机器学习中的各种分类算法的优缺点做一个总结。 2. 贝叶斯分类法 2.1 优点 所需估计的参数少&#xff0c;对于缺失数据不敏感。有着坚实的数学基础&#xff0c;以及稳定的分类效率。2.2 缺点…

公司新来一个同事:为什么 HashMap 不能一边遍历一边删除?一下子把我问懵了!

前段时间,同事在代码中KW扫描的时候出现这样一条:上面出现这样的原因是在使用foreach对HashMap进行遍历时,同时进行put赋值操作会有问题,异常ConcurrentModificationException。于是帮同简单的看了一下,印象中集合类在进行遍历时同时进行删除或者添加操作时需要谨慎,一般使用迭代器进行操作。于是告诉同事,应该使用迭代器Iterator来对集合元素进行操作。同事问我为什么?这一下子把我问蒙了?对啊,只是记得这样用不可以,但是好像自己从来没有细究过为什么?

一文搞懂MySQL索引

官方介绍索引是帮助MySQL高效获取数据的数据结构。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的(可能存储在单独的索引文件中,也可能和数据一起存储在数据文件中)。我们通常所说的索引,包括聚集索引、覆盖索引、组合索引、前缀索引、唯一索引等,没有特别说明,默认都是使用B+树结构组织(多路搜索树,并不一定是二叉的)的索引。看到这里,你是不是对于自己的sql语句里面的索引的有了更多优化想法呢。

leetcode-45 跳跃游戏II

给定一个非负整数数组&#xff0c;你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例: 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。 从下标为 0 跳到下标…

做技术到底可以做到哪种地步-技术为什么越走越窄 (转)

尽管做技术已经有不少年头了&#xff0c;不管是犹犹豫豫还是坚定不移&#xff0c;我们走到了现在&#xff0c;依然走在技术这条路上。 不管我们处于何种职位&#xff0c;拿着哪种薪水&#xff0c;其实&#xff0c;我们会是不是的问问自己“做技术到底可以做到那种地步”&#x…

linux本地agent执行脚本_github 4.4K星|马哥教育企业教练团队研发一款轻量级、无Agent自动化运维平台...

马哥教育企业教练团队研发了一款自动化运维平台系统—Spug&#xff0c;上线后广受中小运维爱好者喜爱&#xff0c;目前github4.4k星&#xff0c;已经成为自动化热门项目。2020年了&#xff0c;运维不会搞运维自动化&#xff0c;都不好意思说自己做运维的了&#xff0c;大一点的…

mysql 数据目录更改

[CentOS]MySQL更改数据文件存储目录环境&#xff1a;CentOS(Linux) Mysql5.X 1.如果MySQL已经启动的话&#xff0c;需要先停止MySQL的运行#service mysqld stop2.home 目录下新建目录[data]/home #mkdir data3.移动MySQL默认数据库文件#mv /var/lib/mysql /home/data4.修改MySQ…