python 数据流中的移动平均值_剑指Offer-41-数据流中的中位数

4c2e2a4d258a9f05fef364e2c4c7c5ce.png

题目

题目描述

如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。

例如,

[2,3,4] 的中位数是 3

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

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

示例1

输入:
["MedianFinder","addNum","addNum","findMedian","addNum","findMedian"]
[[],[1],[2],[],[3],[]]输出: [null,null,null,1.50000,null,2.00000]

示例2

输入:
["MedianFinder","addNum","findMedian","addNum","findMedian"]
[[],[2],[],[3],[]] 输出: [null,null,2.00000,null,2.50000]

题解

维护同样大小的 小顶堆和大顶堆,分别存放较大和较小的一半元素,根据两个堆顶元素得到数据流的中位数。

新元素进堆(允许大值堆/小顶堆比小值堆/大顶堆元素个数多1):
- 当 大值堆不等于小值堆 元素个数时: 即大值堆个数多一个,上一轮中位数为大值堆堆顶元素,则将新元素插入大值堆,再将大值堆堆顶元素弹出并插入到小值堆,此时大值堆与小值堆元素个数相等,由两个堆顶元素共同确定中位数;
- 当 大值堆等于小值堆 元素个数时: 将新元素插入小值堆,再将小值堆堆顶元素弹出插入到大值堆,此时大值堆元素个数多1,堆顶元素为中位数;

时间复杂度: O(logn),堆的插入和弹出均为O(logn);空间复杂度: O(n),大值堆和小值堆共占用额外空间O(n);
class MedianFinder:def __init__(self):"""initialize your data structure here."""self.max_heap, self.min_heap = [], []def addNum(self, num: int) -> None:if len(self.max_heap) != len(self.min_heap):heappush(self.max_heap, num)heappush(self.min_heap, -heappop(self.max_heap))else:heappush(self.min_heap, -num)heappush(self.max_heap, -heappop(self.min_heap))def findMedian(self) -> float:return self.max_heap[0] if len(self.max_heap) != len(self.min_heap) else (self.max_heap[0]-self.min_heap[0]) / 2.0# Your MedianFinder object will be instantiated and called as such:
# obj = MedianFinder()
# obj.addNum(num)
# param_2 = obj.findMedian()
Python 中 heapq 模块是小顶堆。实现 大顶堆 方法: 小顶堆的插入和弹出操作均将元素 取反(负数) 即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 全局键盘_如何解决ios input框唤起软键盘不灵敏问题?

为什么移动端点击事件要加300ms延迟呢?早在 2007 年初,苹果公司在发布首款 iPhone 前夕,遇到一个问题:当时的网站都是为大屏幕设备所设计的。于是苹果的工程师们做了一些约定,应对 iPhone 这种小屏幕浏览桌面端站点的问…

css一个盒子里可以装3个图片并排吗_John: CSS浮动与清除浮动属性详解(CSS float clear)...

CSS里的浮动,可以让元素脱离标准流,从左上角或右上角依次贴边排列。下面这个案例将会帮我们了解浮动的基本情况。下面这段代码块,外面是一个大div,里面包含着3个div,第一个左浮动,后两个无浮动。//style样式…

连接驱动_在jdbc中完成对于jdbc参数、jdbc变量,加载驱动,创建连接的封装

JDBC简介JDBC中文含义:Java数据库连接,英文全称:Java Database Connectivity。它是Java语言中用来规范访问数据库的接口,提供了放多接口方法,例如查询 、更新、插入、删除等方法。另外一点要注意的是:JDBC是…

tensorflow 保存训练loss_tensorflow2.0保存和加载模型 (tensorflow2.0官方教程翻译)

最新版本:https://www.mashangxue123.com/tensorflow/tf2-tutorials-keras-save_and_restore_models.html英文版本:https://tensorflow.google.cn/alpha/tutorials/keras/save_and_restore_models翻译建议PR:https://github.com/mashangxue/t…

layui导入模板数据_数据可视化图表 教程echarts,第一讲

1我们写web项目,展示数据的地方,可能会使用到图表。今天就讲这个玩意。本教程暂时定为 三讲:(随后情况,如果有新的研究,会有所更新!)第一讲 饼图的使用第二讲 柱状图的使用第三讲 拆线图的使用此教程希望…

出发a标签_以用户标签为例,复盘B端产品的需求挖掘方法论

阅读指南受众人群:B端初级产品经理阅读收获:B端产品需求挖掘的一些技巧;了解用户标签/画像的一些业务知识。手上负责一个和数据方面有关的B端系统,在日常的产品规划当中,没有关于“用户标签”方面的规划,突…

字符ascii码值转换_没想到 Unicode 字符还能这样玩?

脚本之家你与百万开发者在一起来源 | 程序通事(ID:US_stocks)如若转载请联系原公众号上周的时候,朋友圈的直升飞机不知道为什么就火了,很多朋友开着各种花式飞机带着起飞。图片来自网络还没来得及了解咋回事来着,这个直升飞机就?…

右键菜单无响应_被流氓软件玩坏了?这两个清理工具拯救你凌乱的右键菜单。...

Hello 这里是一周进步我们写了四年近2000篇的干货文章,还分享了许多实用的神器工具,一路以来,感谢大家的支持与陪伴~文 / 一周进步 安哥拉如果你和我们一样,是一个喜欢在电脑上安装各种各样的软件的人,你的电脑右键菜…

python列表超出索引_python列表的切片操作允许索引超出范围

web开发的步骤前端知道是浏览器呈现的部分,相对于前端,后台你可以理解为服务器端专门处理.读取.存储数据库数据的部分. 因为网站是基于B\S架构,即浏览器---服务端架构,就程序来讲,可笼统划分为前端程序和服务器端程 ...const 指针的三种使用方式///const 指针的三种状态/ 注意:…

linux搭建mcpe服务器_Ubuntu Linux下搭建Minecraft我的世界服务器

总结一下在Ubuntu Linux下搭建Minecraft我的世界服务器的方法,其实非常简单直接。(1)、把当前的软件都更新到最新sudo apt-get updateMinecraft服务器需要Java支持。为了检查我们是否已经安装Java,我们执行下面的命令:java -version如果Java已…

supersocke接收不到数据_基于SuperSocket的北斗终端数据接收服务的设计与实现

基于SuperSocket的北斗终端数据接收服务的设计与实现刘朴,莫家勤*【摘要】北斗是我国自主研发的卫星导航定位系统,已经被广泛使用于各个领域,城市交通管理的核心是车辆监控,为了实现车辆的智能管理,获取车辆信息是首要任务,基于北斗二代的车载终端能够精确获取车辆信息,因此实现…

winform防止sqlserver注入_c# 防止sql注入对拼接sql脚本的各个参数处理

/// ///过滤标记/// /// 包括HTML,脚本,数据库关键字,特殊字符的源码/// 已经去除标记后的文字public string NoHtml(stringHtmlstring){if (Htmlstring null){return "";}else{//删除脚本Htmlstring Regex.Replace(Htmlstring, …

jsp mysql源码_jsp+servlet+mysql员工管理系统源代码下载

jspservletmysql员工管理系统项目截图注册页面登录页面添加员工编辑员工员工列表数据库建表语句/*Navicat MySQL Data TransferSource Server : localhostSource Server Version : 50509Source Host : localhost:3306Source Database : wdhdbTarget Server Type : MYSQLTarget …

mysql varchar(20)_MySQL中采用类型varchar(20)和varchar(255)对性能上的影响

MySQL建立索引时如果没有限制索引的大小,索引长度会默认采用的该字段的长度,也就是说varchar(20)和varchar(255)对应的索引长度分别为203(utf-8)(21),2553(utf-8)(21),其中"2"用来存储长度信息,“1”用来标记…

添加mysql至服务器_mysql 如何添加服务器

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

vs里安装了mysql吗_vs2017安装 MySQL for Visual Studio 1.2.

vs2017安装想在win7EF6 VS2017 MySQL 但是安装MySQL for Visual Studio 1.2.7 时一直安装不上去,如下:Action 9:40:05: InstallFinalize.1: Action 9:40:05: DeleteRegKeyAndExtensionsFile_VS2013.1: Action 9:40:06: DeleteRegKeyAndExtensionsFile_…

var lib mysql ib_MYSQL问题解决

1、MySQL错误日志里出现:140331 10:08:18 [ERROR] Error reading master configuration140331 10:08:18 [ERROR] Failed to initialize the master info structure140331 10:08:18 [Note] Event Scheduler: Loaded 0 events从错误提示就可以看出和mster info相关&am…

mysql数据库优化语句_mysql数据库优化语句

mysql优化语句数据库语句: Ddl(数据定义语言) alter create drop Dml(数据操作语言) inset delete update www.2cto.com Dtl(数据事务语言) conmmit rollback savepoint Select Dcl(数据控制语句) grant赋权限 revoke回收 Mysql数据库优化: 1、 数据库表…

linux mysql 目录结构图_linux下mysql安装、目录结构、配置

1、准备安装程序(官方网站下载)服务端:MySQL-server-community-5.1.44-1.rhel4.i386.rpm客户端:MySQL-client-community-5.1.44-1.rhel4.i386.rpm2、安装(打印信息略)[rootlocalhost /]#rpm -ivh MySQL-server-community-5.1.44-1.rhel4.i386.rpm;[rootl…

php mysql删除失败_php mysql删除的代码哪里出错了?

<?phpsession_start ();if($_SESSION[droits]f){echo("vousn\avezpasdedroit");}include(dirname(__FILE__)."/includes/connexion.php");?>-//W3C//DTDHTML4...session_start();if ($_SESSION[droits] f){echo("vous n\avez pas de droit&q…