You need to enable JavaScript to run this app.
最新活动
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

中位数维护的实现

中位数是指一组数据中居于中间位置的数,即将数据按照从小到大的顺序排列,中间位置的数即为中位数。在实际问题中,我们可能会遇到需要动态维护数据集合的中位数的情况。

以下是一种基于两个堆实现中位数维护的方法,其中一个堆用于存储较小的一半数据,另一个堆用于存储较大的一半数据。假设数据集合为numsminHeap代表小顶堆,maxHeap代表大顶堆。

  1. 初始化两个堆为空堆。
  2. 遍历数据集合中的每个元素:
    • 如果两个堆都为空,将元素插入大顶堆。
    • 如果元素小于等于大顶堆的堆顶元素,将元素插入大顶堆。
    • 如果元素大于大顶堆的堆顶元素,将元素插入小顶堆。
    • 如果两个堆的大小相差大于1,调整两个堆的大小,使得两个堆的大小差不超过1,同时保证小顶堆的堆顶元素大于大顶堆的堆顶元素。
  3. 如果两个堆的大小相等,中位数为两个堆的堆顶元素的平均值。
  4. 如果两个堆的大小不等,中位数为较大堆的堆顶元素。

下面是一个示例的代码实现(使用Python语言):

import heapq

class MedianFinder:
    def __init__(self):
        self.minHeap = []  # 小顶堆,存储较大的一半数据
        self.maxHeap = []  # 大顶堆,存储较小的一半数据

    def addNum(self, num):
        if len(self.minHeap) == len(self.maxHeap):
            # 添加元素到大顶堆,先取反再加入,以实现大顶堆效果
            heapq.heappush(self.maxHeap, -num)
            # 将大顶堆的堆顶元素取反并加入小顶堆
            heapq.heappush(self.minHeap, -heapq.heappop(self.maxHeap))
        else:
            # 添加元素到小顶堆,直接加入
            heapq.heappush(self.minHeap, num)
            # 将小顶堆的堆顶元素取反并加入大顶堆
            heapq.heappush(self.maxHeap, -heapq.heappop(self.minHeap))

    def findMedian(self):
        if len(self.minHeap) == len(self.maxHeap):
            # 两个堆的大小相等,中位数为两个堆的堆顶元素的平均值
            return (self.minHeap[0] - self.maxHeap[0]) / 2
        else:
            # 两个堆的大小不等,中位数为较大堆的堆顶元素
            return -self.maxHeap[0]

使用示例:

mf = MedianFinder()
mf.addNum(1)
mf.addNum(3)
print(mf.findMedian())  # 输出1.0
mf.addNum(2)
print(mf.findMedian())  # 输出1.5

以上代码使用了Python标准库中的heapq模块来实现堆的操作。在addNum方法中,根据数据的大小将元素插入到对应的堆中,并调整两个堆的大小。在findMedian方法中,根据两个堆的大小返回中位数。

本文内容通过AI工具匹配关键字智能整合而成,仅供参考,火山引擎不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系service@volcengine.com进行反馈,火山引擎收到您的反馈后将及时答复和处理。
展开更多
面向开发者的云福利中心,ECS 60元/年,域名1元起,助力开发者快速在云上构建可靠应用

社区干货

云原生与ChaosMeta

作者:刘凇杉(chaosmeta-platform发起人)## 一.云原生### 理解云原生旨在提供更高效、可扩展和可靠的应用程序交付和管理方式。云原生下的软件开发、构建和运行依托于云计算,通过容器化技术将应用程序拆分为一系列微服务,实现了应用现代化。这种架构提高了应用程序的可维护性、灵活性和可扩展性。### 云原生改造步骤由于金融业对安全性和稳定性有着极高的要求,云原生化改造过程中必须考虑合规性、连续性和功能完整性。为...

Spark AQE SkewedJoin 在字节跳动的实践和优化

拆分后的数据大小几乎和中位数一致,将长尾Task的影响降到最低。MapStage 执行结束之后,每一个 MapTask 会生成统计结果 MapStatus,并将其发送给 Driver。MapStatus维护了一个 Array[Long],记录了该 MapTask 中属于... 因此不属于社区实现的范围内。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/ac585451ccfd4b07a8cb89b4e106a60d~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1...

干货|一套架构框架满足流批数据质量监控

一般可以用业务系统的 API 实现互相调用。* 事件触发高效,Backend 水平扩展能力强:Backend 是无状态的实例服务,如果质量监控的业务系统较多,Backend 可以采用水平扩展的方式部署,接收请求并提交作业。* 没有 ... 探查时间中位数从之前的 7min 缩短到目前的不到 40s,效果非常显著。**流式监控支持抽样 & 单 Topic 多 Rule 优化**![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om...

人生大事「我的 2022 技术总结与盘点」|社区征文

这里我有一点小小的总结:1、除非公司离开了你业务无法运转,或者程序无法维护。2、一定要进入到业务开发中,无论你有多忙,一定要保住核心业务的核心开发。## 学习面试过程中一定要不断地学习,复盘自己的面试过... [ Swift 获取无序的整数序列的中位数(堆 + 归并)](https://juejin.cn/post/7126154813150068743)[Swift 堆排序详解](https://juejin.cn/post/7126583941389090824)[Swift 归并排序详解](https://juejin.cn/pos...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

中位数维护的实现-优选内容

云原生与ChaosMeta
作者:刘凇杉(chaosmeta-platform发起人)## 一.云原生### 理解云原生旨在提供更高效、可扩展和可靠的应用程序交付和管理方式。云原生下的软件开发、构建和运行依托于云计算,通过容器化技术将应用程序拆分为一系列微服务,实现了应用现代化。这种架构提高了应用程序的可维护性、灵活性和可扩展性。### 云原生改造步骤由于金融业对安全性和稳定性有着极高的要求,云原生化改造过程中必须考虑合规性、连续性和功能完整性。为...
Spark AQE SkewedJoin 在字节跳动的实践和优化
拆分后的数据大小几乎和中位数一致,将长尾Task的影响降到最低。MapStage 执行结束之后,每一个 MapTask 会生成统计结果 MapStatus,并将其发送给 Driver。MapStatus维护了一个 Array[Long],记录了该 MapTask 中属于... 因此不属于社区实现的范围内。![picture.image](https://p3-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om/ac585451ccfd4b07a8cb89b4e106a60d~tplv-tlddhu82om-image.image?=&rk3s=8031ce6d&x-expires=1...
干货|一套架构框架满足流批数据质量监控
一般可以用业务系统的 API 实现互相调用。* 事件触发高效,Backend 水平扩展能力强:Backend 是无状态的实例服务,如果质量监控的业务系统较多,Backend 可以采用水平扩展的方式部署,接收请求并提交作业。* 没有 ... 探查时间中位数从之前的 7min 缩短到目前的不到 40s,效果非常显著。**流式监控支持抽样 & 单 Topic 多 Rule 优化**![picture.image](https://p6-volc-community-sign.byteimg.com/tos-cn-i-tlddhu82om...
人生大事「我的 2022 技术总结与盘点」|社区征文
这里我有一点小小的总结:1、除非公司离开了你业务无法运转,或者程序无法维护。2、一定要进入到业务开发中,无论你有多忙,一定要保住核心业务的核心开发。## 学习面试过程中一定要不断地学习,复盘自己的面试过... [ Swift 获取无序的整数序列的中位数(堆 + 归并)](https://juejin.cn/post/7126154813150068743)[Swift 堆排序详解](https://juejin.cn/post/7126583941389090824)[Swift 归并排序详解](https://juejin.cn/pos...

中位数维护的实现-相关内容

万字长文带你漫游数据结构世界|社区征文

如果计算结果超出了位数所能表示的范围,那就是溢出,就说明需要更多的位数才能正确表示。一般能用位运算的,都尽量使用位运算,因为它比较高效, 常见的位运算:- `~`:按位取反- `&`:按为与运算- `|`:按位或运算... `redis`中使用一个随机算法来计算层级,计算出每个节点到底多少层索引,虽然不能绝对保证比较平衡,但是基本保证了效率,实现起来比那些平衡树,红黑树的算法简单一点。## 栈栈是一种数据结构,在`Java`里面体现是`S...

API发布历史

表示公共镜像是否长期维护。 新增返回数据:新增IsLTS,表示公共镜像是否长期维护。 监控 DescribeEventTypes 变更请求参数:Types.N参数新增枚举值InstanceOOM表示实例内存OOM。 DescribeSystemEvents 变更请... 允许的小数点后位数。 Parameters参数,表示命令中包含的自定义参数具体值。 更新请求参数:Type参数新增枚举值,Bat表示创建一个Bat脚本;PowerShell表示创建一个PowerShell脚本。 2023年09月12日模块 接口名称 变...

火山引擎流批数据质量解决方案和最佳实践

一般可以用业务系统的 API 实现互相调用。* **事件触发高效,Backend 水平扩展能力强**:Backend 是无状态的实例服务,如果质量监控的业务系统较多,Backend 可以采用水平扩展的方式部署,接收请求并提交作业。* **没... 探查时间中位数从之前的 7min 缩短到目前的不到 40s,效果非常显著。**流式监控支持抽样 & 单 Topic 多 Rule 优化** **Kafka 数据抽样**一般流式数据的问题都是通用性问题,可以通过数据采样发现问题...

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

构建满足流批数据质量监控用火山引擎DataLeap

一般可以用业务系统的 API 实现互相调用。- 事件触发高效,Backend 水平扩展能力强:Backend 是无状态的实例服务,如果质量监控的业务系统较多,Backend 可以采用水平扩展的方式部署,接收请求并提交作业。- 没有... 探查时间中位数从之前的 7min 缩短到目前的不到 40s,效果非常显著。**流式监控支持抽样 & 单 Topic 多 Rule 优化****Kafka 数据抽样**一般流式数据的问题都是通用性问题,可以通过数据采样发现问题。因此我们...

打造新一代云原生"消息、事件、流"统一消息引擎的融合处理平台 | 社区征文

在过去的数年中,RocketMQ基于大规模云计算环境的实践经验(例如,阿里(双十一、双十二)、携程(过年高峰期)),辅助了成千上万的企业完成数字化转型,从而实现了从互联网消息中间件到云原生消息中间件的发展变革。Rocket... 在RocketMQ 5.0中,大量的逻辑被下沉到服务端,使得SDK的代码行数减少了60%。这种下沉的设计使得开发和维护多语言SDK的成本大幅度降低。同时,这也使得RocketMQ的SDK变得更加轻量化,更容易被Service Mesh、Dapr等云原...

火山引擎流批数据质量解决方案和最佳实践

一般可以用业务系统的 API 实现互相调用。- **事件触发高效,Backend 水平扩展能力强**:Backend 是无状态的实例服务,如果质量监控的业务系统较多,Backend 可以采用水平扩展的方式部署,接收请求并提交作业。- ... 探查时间中位数从之前的 7min 缩短到目前的不到 40s,效果非常显著。### 流式监控支持抽样 & 单 Topic 多 Rule 优化**Kafka** **数据抽样**一般流式数据的问题都是通用性问题,可以通过数据采样发现问题。因此...

从重构到扩展——跨端通讯SDK

跨端通信SDK本质上是应用层面的一种协议的实现,因此不需要频繁的迭代和维护,根据SDK选取的通信方式和一些简单的代码组织,我们很快就可以构建出一套适用业务的通信SDK,在业务早期,我们很多项目中都是采用同一个单文... 这里的主要通讯流程:1. Jockey调用Dispatch.send方法;2. Dispatch.send调用Dispatch.dispatchMessage方法;3. Dispatch.dispatchMessage内部创建一个iframe元素,填入src,并添加到dom中;4. iframe经由WebView发...

KubeWharf: 云原生分布式操作系统体验部署|社区征文

在大规模运行的环境中,管理和维护 Kubernetes 集群可能变得更加复杂,需要更高效的分布式操作系统来应对这些挑战。**KubeWharf 的应用背景**- KubeWharf 作为分布式操作系统,在这一背景下应运而生,旨在满... 中自主管理和控制其基础设施。**存储系统的云原生化——》** KubeWharf 在存储系统的云原生化方面提供了强有力的支持。通过与 Kubernetes 紧密集成,KubeWharf 使存储系统更好地适应云原生环境,实现了高度的可扩展...

实践|超级品牌,都在打造数据飞轮

实现数据资产和业务应用的飞轮效应,激发员工创造力,增强业务发展动力,提升组织生命力。 **数据消费,亦是收钱吧内部运营的日常。** 作为生长于互联网科技土壤的企业,数据驱动业务运营已经融入收... 在BD岗位员工的工作中, **及时唤醒沉睡商户** 是项重要工作。 收钱吧目前有上万名BD员工负责超过700万的商户关系维护,过去,收钱吧习惯以月度为单位拉取数据复盘非活跃商户,再将非活跃商户数据下发给BD员...

特惠活动

热门爆款云服务器

100%性能独享,更高内存性能更佳,学习测试、web前端、企业应用首选,每日花费低至0.55元
60.00/1212.00/年
立即购买

域名注册服务

cn/top/com等热门域名,首年低至1元,邮箱建站必选
1.00/首年起32.00/首年起
立即购买

DCDN国内流量包100G

同时抵扣CDN与DCDN两种流量消耗,加速分发更实惠
2.00/20.00/年
立即购买

产品体验

体验中心

云服务器特惠

云服务器
云服务器ECS新人特惠
立即抢购

白皮书

一图详解大模型
浓缩大模型架构,厘清生产和应用链路关系
立即获取

最新活动

爆款1核2G共享型服务器

首年60元,每月仅需5元,限量秒杀
立即抢购

火山引擎增长体验专区

丰富能力激励企业快速增长
查看详情

数据智能VeDI

易用的高性能大数据产品家族
了解详情

一键开启云上增长新空间

立即咨询