数据流的中位数

题目链接

数据流的中位数

题目描述


注意点

  • 在调用 findMedian 之前,数据结构中至少有一个元素
  • 如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值

解答思路

  • 使用两个优先队列存储数据流,其中一个优先队列队首为最大元素,另一个队首为最小元素,始终保持两个优先队列元素数量平衡,计算中位数只需要取优先队列的队首即可,不需要对其他元素进行排序

代码

class MedianFinder {
    // 队首为最小元素
    PriorityQueue<Integer> minQueue;
    // 队首为最大元素
    PriorityQueue<Integer> maxQueue;

    public MedianFinder() {
        minQueue = new PriorityQueue<>((a, b) -> (b - a));
        maxQueue = new PriorityQueue<>((a, b) -> (a - b));
    }
    
    public void addNum(int num) {
        if (minQueue.isEmpty()) {
            minQueue.offer(num);
            return;
        }
        if (num < minQueue.peek()) {
            minQueue.offer(num);
            if (minQueue.size() > maxQueue.size() + 1) {
                maxQueue.offer(minQueue.poll());
            }
        } else {
            maxQueue.offer(num);
            if (maxQueue.size() > minQueue.size()) {
                minQueue.offer(maxQueue.poll());
            }
        }
    }
    
    public double findMedian() {
        if ((minQueue.size() + maxQueue.size()) % 2 == 0) {
            return (double) (minQueue.peek() + maxQueue.peek()) / 2;
        } else {
            return minQueue.peek();
        }
    }
}

关键点

  • 优先队列加入数字时始终保持队首为最大或最小数字
  • 始终保持两个优先队列的容量大小不超过1,在计算中位数时只需要取队首的元素即可

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

webrtc中的接口代理框架

文章目录 接口代理框架Proxy体系类结构导出接口 webrtc的实际运用PeerConnectionFactoyPeerConnection使用 接口代理框架 webrtc体系庞大&#xff0c;模块化极好&#xff0c;大多数模块都可以独立使用。模块提供接口&#xff0c;外部代码通过接口来使用模块功能。 在webrtc中通…

面向对象基础-析构函数-this-static-const

析构函数 析构函数是与构造函数对立的函数。 构造函数 析构函数 创建对象时手动调用 当对象销毁时&#xff0c;自动调用 函数名称与类名相同 函数名称是~类名 构造函数可以重载 析构函数没有参数&#xff0c;不能重载 用于创建对象时并初始化 用于销毁对象时释放资源 …

webRTC实时通信demo

参考文档&#xff1a; https://www.jianshu.com/p/f439ce5cc0be https://www.w3cschool.cn/socket demo流程示意图&#xff08;用户A向用户B推送视频&#xff09;&#xff1a; #mermaid-svg-0KZaDQ5DBl28zjmZ {font-family:"trebuchet ms",verdana,arial,sans-seri…

影视后期:PR 调色处理,灰片还原,校色偏色素材

灰片还原 确定拍摄灰片的相机型号品牌官网下载专用log文件LUT-浏览-导入slog3分析亮部波形-增加画面对比分析矢量示波器-提高整体饱和 校正LUT可以将前期拍摄的log色彩模式的视频转换为成709色彩模式&#xff0c;即将灰度视频转换为正常效果(灰片还原) 各个相机有对应的校正L…

链路层、网络层、传输层、应用层长度

参考&#xff1a;链路层、网络层、传输层、应用层长度 链接&#xff1a;https://blog.csdn.net/qq_41658597/article/details/120683870 目录 1、概述2、TCP、UDP数据包最大值的确定3、TCP、UDP数据包最小值的确定4、实际应用IP层 1、概述 首先要看TCP/IP协议&#xff0c;涉及到…

PyTorch中常用的工具(4)Visdom

文章目录 前言3.2 Visdom 前言 在训练神经网络的过程中需要用到很多的工具&#xff0c;最重要的是数据处理、可视化和GPU加速。本章主要介绍PyTorch在这些方面常用的工具模块&#xff0c;合理使用这些工具可以极大地提高编程效率。 由于内容较多&#xff0c;本文分成了五篇文…

李宏毅机器学习第二十三周周报 Flow-based model

文章目录 week 23 Flow-based model摘要Abstract一、李宏毅机器学习1.引言2.数学背景2.1Jacobian2.2Determinant2.3Change of Variable Theorem 3.Flow-based Model4.GLOW 二、文献阅读1. 题目2. abstract3. 网络架构3.1 change of variable formula3.2 Coupling layers3.3Prop…

http——https实现指南

第一部分&#xff1a;HTTPS安全证书简介 什么是HTTPS安全证书&#xff1f; 在网络通信中&#xff0c;HTTPS安全证书是一种由可信任的证书颁发机构&#xff08;CA&#xff09;签发的数字证书&#xff0c;用于保障网站与用户之间的数据传输安全。通过加密和身份验证&#xff0c…

nginx安装和配置

目录 1.安装 2.配置 3.最小配置说明 4. nginx 默认访问路径 1.安装 使用 epel 源安装 先安装 yum 的扩展包 yum install epel-release -y 再安装 nginx yum install nginx -y 在启动nginx 前先关闭防火墙 systemctl stop firewalld 取消防火墙开机自启 systemctl di…

idea中java maven程序打JAR包的方式

JAR包是一种文件格式&#xff0c;用于将Java类、资源和元数据打包到一个文件中。它通常用于将Java库、应用程序或模块分发给其他开发人员或部署到不同的环境中。JAR包可以包含许多不同类型的文件&#xff0c;包括.class文件&#xff08;编译后的Java类&#xff09;、.java文件&…

oracle-SCN系统改变号

SCN system change number 我们看到的SCN是一串数字&#xff0c;由时间经过函数算出的&#xff0c;其实就是时间。但时间的比较复杂&#xff0c;不如转换成数字比较。 给一个日志加scn号&#xff0c;其实就是给日志加上时间点。 2常见的SCN 对于scn的理解 控制文件中有两个sc…

TDD-LTE TAU流程

目录 1. TAU成功流程 1.1 空闲态TAU 1.2 连接态TAU 2. TAU失败流程 当UE进入一个小区&#xff0c;该小区所属TAI不在UE保存的TAI list内时&#xff0c;UE发起正常TAU流程&#xff0c;分为IDLE和CONNECTED&#xff08;即切换时&#xff09;下。如果TAU accept分配了一个新的…

HarmonyOS应用开发-搭建开发环境

本文介绍如何搭建 HarmonyOS 应用的开发环境&#xff0c;介绍下载安装 DevEco Studio 开发工具和 SDK 的详细流程。华为鸿蒙 DevEco Studio 是面向全场景的一站式集成开发环境&#xff0c;面向全场景多设备&#xff0c;提供一站式的分布式应用开发平台&#xff0c;支持分布式多…

【起草】【第十二章】定制ChatGPT数字亲人

身为普普通通的我们&#xff0c;不知道亲人们在哪一天就要离开这个世界 &#xff1f; 作为普普通通的程序员&#xff0c;我们可以为我们的亲人做点什么 &#xff1f; 让他们以数字资产形式留在人世间 ? 对话&#xff5c;6岁女孩病逝捐器官&#xff0c;妈妈&#xff1a;她去…

js中的数组使用及常见属性方法

目录 数组概念 数组创建方法 数组的length属性 数组的遍历的使用 JavaScript 常用数组方法 concat typeof split length charAt indexOf substring push pop join 数组概念 数组对象的作用是&#xff1a;使用单独的变量名来存储一系列的值。 数组创建方法 构造函…

Matplotlib_4.文字图例尽眉目

文章目录 一、Figure和Axes上的文本1.text2.title和set_title3.figtext和text4.suptitle5.xlabel和ylabel6.annotate7.字体的属性设置 二、Tick上的文本1.简单模式2.Tick Locators and Formatters 三、legend&#xff08;图例&#xff09; 一、Figure和Axes上的文本 Matplotli…

面试官:说说JVM内存整体结构?

Java JVM内存结构的面试常问知识 说说JVM内存整体的结构&#xff1f;线程私有还是共享的&#xff1f; JVM 整体架构&#xff0c;中间部分就是 Java 虚拟机定义的各种运行时数据区域。 ​ Java 虚拟机定义了若干种程序运行期间会使用到的运行时数据区&#xff0c;其中有一些会…

《深入理解Java虚拟机(第三版)》读书笔记:Java内存区域与内存溢出异常、垃圾收集器与内存分配策略

下文是阅读《深入理解Java虚拟机&#xff08;第3版&#xff09;》这本书的读书笔记&#xff0c;如有侵权&#xff0c;请联系删除。 文章目录 第2章 Java内存区域与内存溢出异常2.2 运行时数据区域2.3 HotSpot虚拟机对象探秘 第3章 垃圾收集器与内存分配策略3.2 对象已死&…

网络安全专家 Mikko Hyppönen 对 2024 年的五大 AI 网络威胁发出警告

在网络安全前线战斗了数十年的 Mikko Hyppnen&#xff0c;这位 54 岁的专家最近在一次视频通话中向 TNW 透露了他对 2024 年最令人担忧的五大人工智能&#xff08;AI&#xff09;网络威胁。这些威胁并没有特定的顺序&#xff0c;尽管其中有一个是导致他最为失眠的。 深度伪造&a…

HarmonyOS官网案例解析——保存应用数据

介绍 本篇Codelab将介绍如何使用基础组件Slider&#xff0c;通过拖动滑块调节应用内字体大小。要求完成以下功能&#xff1a; 实现两个页面的UX&#xff1a;主页面和字体大小调节页面。拖动滑块改变字体大小系数&#xff0c;列表页和调节页面字体大小同步变化。往右拖动滑块字体…