算法通关村第14关【黄金】| 数据流的中位数

news2024/11/29 10:52:18

思路:使用一个小根堆+一个大根堆来找中位数

小根堆保存较大的一半数字,大根堆保存较小的一半数字

奇数queMin的队头即为中位数,偶数queMin和queMax队头相加/2为中位数

初始状态: queMin: [] queMax: []

  1. 添加数字 1: queMin: [1] queMax: [] 中位数1

  2. 添加数字 2: queMin: [2] queMax: [1] 中位数1.5

  3. 添加数字 3: queMin: [2, 3] queMax: [1] 中位数2

  4. 添加数字 4: queMin: [3, 4] queMax: [2, 1] 中位数 2.5

  5. 添加数字 5: queMin: [3, 4, 5] queMax: [2, 1] 中位数3

  6. 添加数字 3.5: queMin: [3, 4, 5] queMax: [3.5, 1, 2] 中位数 3.25

class MedianFinder {
    PriorityQueue<Integer> queMin = new PriorityQueue<>();
    PriorityQueue<Integer> queMax = new PriorityQueue<>((a,b)->b-a);
    public MedianFinder() {
    }
    
    public void addNum(int num) {
        if(queMin.isEmpty()||num>queMin.peek()){
            queMin.add(num);
            if(queMin.size()-queMax.size()>1){
                queMax.add(queMin.poll());
            }
        }else{
            queMax.add(num);
            if (queMax.size() > queMin.size()) {
                queMin.offer(queMax.poll());
            }
        }
    }
    
    public double findMedian() {
        if(queMin.size()>queMax.size()){
            return queMin.peek();
        }
        else{
            return (queMin.peek()+queMax.peek())/2.0;
        }
    }
}

/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder obj = new MedianFinder();
 * obj.addNum(num);
 * double param_2 = obj.findMedian();
 */

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

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

相关文章

【Java 基础篇】Java 进程详解:从基础到实践

Java 是一种广泛应用于各种类型的软件开发的编程语言&#xff0c;而与 Java 紧密相关的一个概念就是进程。本篇博客将从基础开始&#xff0c;详细介绍 Java 进程的概念、创建、管理以及一些实际应用场景。无论您是初学者还是有一定经验的开发者&#xff0c;都能从本文中获取有关…

如何高效批量查询快递单号,提高工作效率?

在日常生活中&#xff0c;快递单号的查询是一项常规任务。过去&#xff0c;这项任务需要通过人工一个一个地在快递平台上查询&#xff0c;既耗时又费力。然而&#xff0c;随着科技的发展&#xff0c;我们有了更多的工具可以帮助我们高效地完成这项任务。本文将介绍如何使用固乔…

【List篇】LinkedList 详解

目录 成员变量属性构造方法add(), 插入节点方法remove(), 删除元素方法set(), 修改节点元素方法get(), 取元素方法ArrayList 与 LinkedList的区别Java中的LinkedList是一种实现了List接口的 双向链表数据结构。链表是由一系列 节点(Node)组成的,每个节点包含了指向 上一个…

Java“牵手”1688商品评论数据采集+1688商品评价接口,1688商品追评数据接口,行业商品质检接口,1688API接口申请指南

1688商品评论平台是阿里巴巴集团旗下的一个在线服务市场平台&#xff0c;为卖家提供商品评价服务。平台上有多种评价工具和数据支持&#xff0c;可以帮助卖家更好地了解商品的质量和特点&#xff0c;从而做出更明智的采购决策。 1688商品评论平台支持多种评价方式&#xff0c;…

R语言画多变量间的两两相关性图

语言代码&#xff1a; setwd("D:/Desktop/0000/R") #更改路径df<-read.csv("kaggle/Seed_Data.csv") head(df) df$target<-factor(df$target) # 因为目标是数字&#xff0c;所以加他&#xff0c;不加会报错 cols<-c("steelblue","…

《动手学深度学习 Pytorch版》 7.1 深度卷积神经网络(LeNet)

7.1.1 学习表征 深度卷积神经网络的突破出现在2012年。突破可归因于以下两个关键因素&#xff1a; 缺少的成分&#xff1a;数据 数据集紧缺的情况在 2010 年前后兴起的大数据浪潮中得到改善。ImageNet 挑战赛中&#xff0c;ImageNet数据集由斯坦福大学教授李飞飞小组的研究人…

OpenCV中的HoughLines函数和HoughLinesP函数到底有什么区别?

一、简述 基于OpenCV进行直线检测可以使用HoughLines和HoughLinesP函数完成的。这两个函数之间的唯一区别在于,第一个函数使用标准霍夫变换,第二个函数使用概率霍夫变换(因此名称为 P)。概率版本之所以如此,是因为它仅分析点的子集并估计这些点都属于同一条线的概率。此实…

威胁的数量、复杂程度和扩散程度不断上升

Integrity360 宣布了针对所面临的网络安全威胁、数量以及事件响应挑战的独立研究结果。 数据盗窃、网络钓鱼、勒索软件和 APT 是最令人担忧的问题 这项调查于 2023 年 8 月 9 日至 14 日期间对 205 名 IT 安全决策者进行了调查&#xff0c;强调了他们的主要网络安全威胁和担忧…

评价指标分类

声明 本文是学习GB-T 42874-2023 城市公共设施服务 城市家具 系统建设实施评价规范. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本文件确立了城市家具系统建设实施的评价原则、评价流程&#xff0c;给出了评价指标&#xff0c;描述了 方…

nodejs定时任务

项目需求&#xff1a; 每5秒执行一次&#xff0c;多个定时任务错开&#xff0c;即cron表达式中斜杆前带数字&#xff0c;例如 ‘1/5 * * * * *’定时任务准时&#xff0c;延误低 搜索了nodejs的定时任务&#xff0c;其实不多&#xff0c;找到了以下三个常用的&#xff1a; n…

无涯教程-JavaScript - BETA.INV函数

描述 BETA.INV函数返回beta累积概率密度函数(BETA.DIST)的反函数。如果概率 BETA.DIST(x ... TRUE),则BETA.INV(概率...) x。 在预期的完成时间和可变性的情况下,可以在项目计划中使用beta分布来建模可能的完成时间。 语法 BETA.INV (probability,alpha,beta,[A],[B])争论 …

Linux中使用selenium截图的文字变为方框的解决方案

一、前言 最近在Linux中使用selenium截图时&#xff0c;发现文字都变为了方框&#xff1a; 虽然不影响selenium的使用&#xff0c;但有点影响调试&#xff0c;也不好看&#xff0c;后面发现是因为Linux缺少中文字体的缘故&#xff0c;需要安装中文字体就能解决。 二、安装中文…

安卓Android_手机安装burp的https_CA证书

安卓Android_手机安装burp的https_CA证书 文章目录 安卓Android_手机安装burp的https_CA证书1 打卡电脑wif热点&#xff0c;手机连上电脑的热点2 burp点击 --》 Proxy settings3 点击add ---》新增代理地址和端口4 设置好-展示5 手机连上电脑的wifi热点6 点击查看ip地址与burp …

这些英国学校接受ChatGPT帮助写作

自从ChatGPT展现了其高超的AI技术&#xff0c;全球年轻人纷纷对其表示喜爱&#xff0c;尤其是学生们&#xff0c;将其视为一个优化版的网络搜索引擎&#xff0c;可以用来提高学习效率。 ChatGPT具有多样化的功能&#xff0c;可以节省研究复杂文献的时间&#xff0c;编写简单的…

stm32学习-芯片系列/选型

【03】STM32HAL库开发-初识STM32 | STM概念、芯片分类、命名规则、选型 | STM32原理图设计、看数据手册、最小系统的组成 、STM32IO分配_小浪宝宝的博客-CSDN博客  STM32&#xff1a;ST是意法半导体&#xff0c;M是MCU/MPU&#xff0c;32是32位。  ST累计推出了&#xff1a…

AIGC生成式代码——Code Llama 简介、部署、测试、应用、本地化

导读: 本文介绍了CodeLlama的简介、本地化部署、测试和应用实战方案,帮助学习大语言模型的同学们更好地应用CodeLlama。我们详细讲解了如何将CodeLlama部署到实际应用场景中,并通过实例演示了如何使用CodeLlama进行代码生成和优化。最后,总结了CodeLlama的应用实战经验和注…

9.4.2servlet基础2

一.SmartTomcat 1.第一次使用需要进行配置. 二.异常处理 1.404:浏览器访问的资源,在服务器上不存在. a.检查请求的路径和服务器配置的是否一致(大小写,空格,标点符号). b. 确认webapp是否被正确加载(检查web.xml没有/目录错误/内容错误/名字拼写错误)(多多关注日志信息). 2…

typeof的作用

typeof 是 JavaScript 中的一种运算符&#xff0c;用于获取给定值的数据类型。 它的作用是返回一个字符串&#xff0c;表示目标值的数据类型。通过使用 typeof 运算符&#xff0c;我们可以在运行时确定一个值的类型&#xff0c;从而进行相应的处理或逻辑判断。 常见的数据类型…

slam 点云退化

Lidar Slam退化问题分析报告 摘要&#xff1a;激光雷达在空旷区域存在点云采集数据较少&#xff0c;特征无法对机器人的位置起到约束的作用&#xff0c;考虑LIW融合对最终定位的影响。当错误的LIW即发生退化&#xff0c;位姿输出不准存在较大误差&#xff0c;如果未检测到退化…

MyBatis 插件机制

文章目录 前言自定义插件创建拦截器配置拦截器效果验证 插件实现原理初始化操作如何创建代理对象ExecutorStatementHandlerParameterHandlerResultSetHandler 执行流程 前言 插件是一种常见的扩展方式&#xff0c;大多数开源框架也都支持用户通过添加自定义插件的方式来扩展或…