LeetCode.295数据流的中位数详解

问题描述

中位数是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。

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

实现 MedianFinder 类:

  • MedianFinder() 初始化 MedianFinder 对象。

  • void addNum(int num) 将数据流中的整数 num 添加到数据结构中。

  • double findMedian() 返回到目前为止所有元素的中位数。与实际答案相差 10-5 以内的答案将被接受。

解题思路

为什么使用两个堆?

在面对数据流时,我们往往需要实时添加元素并频繁查询中位数。使用数组或列表虽然简单,但每次添加元素后要求的排序操作是低效的。为了优化这一过程,可以采用两个堆来分别维护数据的较小部分和较大部分:

  • 最大堆用来存储当前元素的较小一半,堆顶是这部分元素的最大值。
  • 最小堆存储较大一半的元素,其堆顶是这部分元素的最小值。

这种结构使得我们可以在对数时间内调整堆并找到中位数,非常适合处理大规模数据。

代码实现

class MedianFinder {
private:// 最大堆存储较小一半元素std::priority_queue<int, std::vector<int>, std::less<int>> maxHeap;// 最小堆存储较大一半元素std::priority_queue<int, std::vector<int>, std::greater<int>> minHeap;public:MedianFinder() {}void addNum(int num) {// 先添加到最大堆maxHeap.push(num);// 保持两个堆的平衡// 将最大堆的最大值转移到最小堆minHeap.push(maxHeap.top());maxHeap.pop();// 如果最小堆元素多于最大堆,调整以保持平衡if (minHeap.size() > maxHeap.size()) {maxHeap.push(minHeap.top());minHeap.pop();}}double findMedian() {// 如果两个堆大小相等,取平均if (maxHeap.size() == minHeap.size()) {return (maxHeap.top() + minHeap.top()) / 2.0;} else {// 如果大小不等,最大堆的顶部元素即为中位数return maxHeap.top();}}
};/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

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

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

相关文章

Advantest 93000测试机中CLOCK DOMAIN 详解

爱德万测试&#xff08;Advantest&#xff09;的V93000系列测试系统是一个高度模块化和可扩展的平台&#xff0c;专为复杂和高性能的半导体器件测试而设计&#xff0c;包括系统级芯片&#xff08;SoC&#xff09;、存储器、射频&#xff08;RF&#xff09;和混合信号器件等。在…

剪画小程序:从失业到自媒体:37岁的勇敢转身!

37岁啦&#xff0c;按说这年纪工作该稳稳当当&#xff0c;家庭也和和美美。可谁能想到&#xff0c;我竟然失业了&#xff01;当时啊&#xff0c;心里头那叫一个迷茫、焦虑&#xff0c;感觉天都要塌下来了。 可日子还得过呀&#xff0c;总不能就这么被生活给打倒&#xff01;现在…

白敬亭章若楠甜度报表的难哄大师

#白敬亭章若楠&#xff0c;甜度爆表的难哄大师#&#x1f389;&#x1f389;&#x1f389;各位小伙伴们&#xff0c;你们还记得那个让我们心跳加速、嘴角上扬的CP组合吗&#xff1f;没错&#xff0c;就是白敬亭和章若楠&#xff01;他们可是凭借一部新剧&#xff0c;再次让我们感…

antd中Select大数据分页触底刷新处理优化

平时使用antd中Select的下拉一般就几十几百条&#xff0c;这时候直接使用组件模糊查询就能实现大部分业务场景需求。 今天遇到一个需要模糊查询并且总量上万条的下拉框&#xff0c;如果一次性怼上去上万条&#xff0c;会造成浏览器卡顿。所以这边采用后端分页&#xff0c;前端…

希喂生骨肉冻干值得入手吗?拯救瘦弱、增强抵抗力最强主食测评!

希喂生骨肉冻干值得入手吗&#xff1f;很多小姐妹觉着自家猫咪太瘦了、体质不咋好&#xff0c;换季还敏感、掉毛、不吃东西&#xff0c;听说生骨肉冻干好吸收、营养好&#xff0c;可以改善体质、拯救瘦弱、增强抵抗力&#xff0c;为了图省事&#xff0c;开始盲入生骨肉冻干&…

盲盒小程序:线上盲盒发展机遇

盲盒已经成为了当下年轻人的潮玩首选方式。随着二次元、影视行业的快速发展&#xff0c;给盲盒提供了各种新的发展方向&#xff0c;盲盒商品也在不断创新&#xff0c;种类丰富多样。玩家在拆盲盒时随机获得某一商品&#xff0c;具有惊喜感和刺激性。 目前&#xff0c;随着小程…

194.回溯算法:组合总和||(力扣)

代码解决 class Solution { public:vector<int> res; // 当前组合的临时存储vector<vector<int>> result; // 存储所有符合条件的组合// 回溯函数void backtracing(vector<int>& candidates, int target, int flag, int index, vector<bool>…

怎么优化亚马逊Listing?看这一篇就够了!

运营亚马逊最重要的工作之一就是优化listing&#xff0c;精心优化好亚马逊标题、五点描述、图片和关键词才能提高产品的可见性和吸引力&#xff0c;很多小伙伴对于怎么写出专业的亚马逊listing还是不知道如何下手&#xff0c;今天为大家分享一套实用的亚马逊listing优化指南&am…

java 简单零钱通

目标 面向过程版 代码 package new_pluse;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class change_common{public static void main(String arg[]){//定义相关变量Scanner scanner new Scanner(System.in);String key&qu…

【深度学习】机器学习基础

机器学习就是让机器具备找一个函数的能力 带有未知的参数的函数称为模型 通常一个模型的修改&#xff0c;往往来自于对这个问题的理解&#xff0c;即领域知识。 损失函数 平均绝对误差&#xff08;Mean Absolute Error&#xff0c;MAE&#xff09; 均方误差&#xff08;Mea…

全面解读OA系统:功能、价值及应用

反复沟通、来回跑腿&#xff0c;还易出错&#xff1b; 纸笔记录、excel统计&#xff0c;效率低耽误事&#xff1b; 档案、物资&#xff0c;查不清记录、看不了实时&#xff1b; 部门各做各的、各管各的&#xff0c;沟通配合难…… 你有没有经历过诸如上述的繁琐办公流程&am…

打包下载怎么实现?

down_zbUploadClearfile({ //http接口 name:1 time:7, }).then(async (res) > { if (res) { this.selectData []; const zip new JSZip(); zip.generateAsync({ type: "object" }).then(() > { const downloadUrl window.URL.createObjectURL(res); …

Python中使用MySQL模糊查询的方法

1.方法一&#xff1a;使用pymysql库的方法 当在Python中使用MySQL进行模糊查询时&#xff0c;我们通常会使用pymysql或mysql-connector-python这样的库来连接MySQL数据库并执行查询。以下是一个使用pymysql进行模糊查询的详细示例&#xff0c;包括安装库、连接数据库、执行查询…

MSA 助力实验室测量更稳定、更准确

在汽车制造、石油化工、电子制造等行业,产品的质量和性能需要通过准确的测量来保证。但是由于测量设备的误差、操作人员的主观影响以及环境条件的干扰等因素会导致测量系统出现各种问题,且这些问题会导致测量结果不准确,从而影响产品质量。 随着工业信息化的迅速发展, 各行业对…

松下的台灯值得入手吗?书客、飞利浦热门品牌横评分享!

自从儿子步入小学&#xff0c;他埋首于书桌前的时光愈发冗长&#xff0c;很欣慰他能够认真专心学习&#xff0c;却也隐隐担忧他的视力健康。在了解视力健康中发现长时间在过暗或过亮的光线环境下学习&#xff0c;会导致瞳孔频繁地收缩与扩张&#xff0c;极易引发视觉疲劳。更令…

Python 基础:用 json 模块存储和读取数据

目录 一、用 json 存储数据二、用 json 读取数据 遇到看不明白的地方&#xff0c;欢迎在评论中留言呐&#xff0c;一起讨论&#xff0c;一起进步&#xff01; 本文参考&#xff1a;《Python编程&#xff1a;从入门到实践&#xff08;第2版&#xff09;》 用户关闭程序时&#…

HTML5 WebSocket:实时通信的新篇章

随着互联网技术的飞速发展&#xff0c;实时交互成为现代Web应用不可或缺的一部分。在这一背景下&#xff0c;HTML5引入了WebSocket协议&#xff0c;彻底改变了传统的客户端与服务器之间的通信方式&#xff0c;为开发者提供了一种高效、全双工、低延迟的数据传输通道。本文将深入…

构建LangChain应用程序的示例代码:45、如何利用大型语言模型(LLMs)和 Python 库 SymPy 进行符号数学计算的教程

这个文件是一个关于如何使用大型语言模型和 Python 进行符号数学计算的示例。它主要展示了如何求解导数、积分、线性方程和微分方程。底层技术栈包括 SymPy&#xff0c;一个 Python 的符号数学库&#xff0c;以及 OpenAI 的 API&#xff0c;用于生成确定性的结果。 LLM 符号数…

无门槛代理SSL证书入门指南

随着网络安全问题日益凸显&#xff0c;SSL证书作为保障网络数据传输安全的重要手段&#xff0c;其市场需求也在持续增长。因此&#xff0c;成为SSL证书代理不仅具有巨大的商业价值&#xff0c;更是提升网络安全保障能力的关键步骤。本文将为您介绍如何快速无门槛代理SSL证书的方…

GMSB文章六:微生物SCFA关联分析

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 微生物短链脂肪酸&#xff08;SCFAs&#xff09;是由肠道微生物发酵膳食纤维、抗性淀粉、低…