LeetCode Hot100 295.数据流的中位数

news2025/2/5 10:50:58

题目

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

  • 例如 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 {
    PriorityQueue<Integer> minHeap; // 小顶堆存储的是比较大的元素,堆顶是其中的最小值
    PriorityQueue<Integer> maxHeap; // 大顶堆存储的是比较小的元素,堆顶是其中的最大值

    public MedianFinder() {
        this.minHeap = new PriorityQueue<>();
        this.maxHeap = new PriorityQueue<>((a, b) -> b - a);
    }
    
    public void addNum(int num) {
        // 第一个元素进minHeap
        // 小顶堆存储的是比较大的元素,num比较大元素中最小的还大,所以,进入minHeap
        if (minHeap.isEmpty() || num > minHeap.peek()) {
            minHeap.offer(num);
            // 如果minHeap比maxHeap多2个元素,就平衡一下
            if (minHeap.size() - maxHeap.size() > 1) 
                maxHeap.offer(minHeap.poll());
        } else {
            maxHeap.offer(num);
            // 这样可以保证多的那个元素肯定在minHeap
            if (maxHeap.size() - minHeap.size() > 0) {
                minHeap.offer(maxHeap.poll());
            }
        }
    }
    
    public double findMedian() {
        boolean flag = minHeap.size() > maxHeap.size(); // true表示总共奇数个数,false表示偶数个数  
        if (flag)
            return minHeap.peek();
        else
            return (maxHeap.peek() + minHeap.peek()) / 2.0;
    }
}

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

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

相关文章

Java:获取线程组的最大优先级

java.lang.ThreadGroup的getMaxPriority()函数返回该线程组的最大优先级。这个最大优先级就等于该线程组中新创建线程的最大优先级。 代码示例&#xff1a; package com.thb;public class Test5 {public static void main(String[] args) {ThreadGroup threadGroup Thread.c…

转义字符使用详解【C语言】

目录 转义字符的概念 转义字符表 转义字符详解 和 实际使用示例 一、\a 二、\b 三、\f 四、\n 五、\r 六、\t 七、\v 八、\\ 九、\ 十、\" 十一、\? 十二、\0 十三、\ddd 十四、\xhh 总结—— 转义字符的概念 所有的 ASCII码都可以用“\加数字” 来表示…

【C语言刷题每日一题#牛客网BC69】——空心正方形图案

目录 问题描述 思路分析 代码实现 结果测试 问题描述 思路分析 首先根据输入的描述&#xff0c;多组输入需要将scanf放在循环中来实现分析输出的规律&#xff1a;当输入为4时&#xff0c;分别在第0行和第3行&#xff08;4-1行&#xff09;&#xff0c;第0列和第3列&#xf…

Sentinel 流量治理组件教程

前言 官网首页&#xff1a;home | Sentinel (sentinelguard.io) 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&#xff0c;主要以流量为切入点&#xff0c;从流量路由、流量控制、流量整形…

PHP开发日志——循环和条件语句嵌套不同,效率不同(循环内加入条件语句,条件语句判断后加入循环,array_map函数中加入条件语句)

十多年前开发框架时&#xff0c;为了效率不断试过各种代码写法&#xff0c;今天又遇到了&#xff0c;想想php8时代会不会有所变化&#xff0c;结果其实也还是和当年一样&#xff0c;但当年没写博客&#xff0c;但现在可以把数据记录下来了。 PHP_loop_ireflies_dark_forest 项目…

【SpringBoot】之Security集成使用(入门级)

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是君易--鑨&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的博客专栏《SpringBoot开发之Security系列》。&#x1f3af…

数据恢复工具推荐!这3款堪称删除文件恢复大师!

“快看看我&#xff01;经常都会莫名奇妙丢失各种电脑文件&#xff0c;但是又无法通过简单的方法找回重要的数据&#xff0c;有没有什么简单的操作可以帮助我快速恢复数据的呀&#xff1f;非常感谢&#xff01;” 在我们的日常生活中&#xff0c;无论是工作还是学习&#xff0c…

软考中级应该选哪个?

选择软考中级科目&#xff0c;应该怎么做&#xff1f; 1.1 软考中级科目有哪些可供选择&#xff1f; 1.2 如何选择适合自己的软考中级科目&#xff1f; 系统集成项目管理工程师真的容易吗&#xff1f; 如何在软考中级阶段选择科目&#xff1f;软考中级共有15个科目。软考共…

鸿蒙开发基本概念

1、开发准备 1.1、UI框架 HarmonyOS提供了一套UI开发框架&#xff0c;即方舟开发框架&#xff08;ArkUI框架&#xff09;。方舟开发框架可为开发者提供应用UI开发所必需的能力&#xff0c;比如多种组件、布局计算、动画能力、UI交互、绘制等。 方舟开发框架针对不同目的和技术…

内皮素-1(Endothelin-1 )ELISA kit

灵敏、快速的内皮素-1 ELISA试剂盒&#xff0c;适用于心血管和应激相关研究 内皮素&#xff08;Endothelin, ET&#xff09;是由血管内皮细胞产生的异肽&#xff0c;具有强大的血管收缩活性。这种肽由三个独立的基因编码&#xff0c;经过加工产生39个残基的 大ET 分子&#xff…

搭建接口自动化测试框架python+requests+pytest

安装python&#xff08;最好是比较新比较稳定的版本&#xff09;&#xff0c;然后是python的解释器或者叫编译器pycharm安装后新建一个项目&#xff0c;以此项目为基础&#xff0c;安装依赖搭建框架。打开pycharm&#xff0c;点击左上角的File->New project->弹出如下界面…

建构伦敦银交易策略可遵循的三个原则

构建交易策略&#xff0c;我们应该遵循什么原则呢&#xff1f;有的人说可以盈利就行了&#xff0c;确实盈利是很关键的&#xff0c;没有人想使用一个导致自己亏损的策略。但构建伦敦银策略的时候可不能简单地以一个可以盈利带过&#xff0c;下面我们就来介绍构建策略时所需的三…

【保姆级教程】使用Mediapipe进行Face Landmark Detection实践和Hand Landmark实践

目录 1 Mediapipe 2 Solutions 3 安装依赖库 4 实践 1 Mediapipe Mediapipe是google的一个开源项目,可以提供开源的、跨平台的常用机器学习(machine learning,ML)方案。MediaPipe是一个用于构建机器学习管道的框架,用于处理视频、音频等时间序列数据。与资源消耗型的机…

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读

Appearance-Motion Memory Consistency Network for Video Anomaly Detection 论文阅读 AbstractIntroductionRelated WorkMethodExperimentsConclusions阅读总结 论文标题&#xff1a;Appearance-Motion Memory Consistency Network for Video Anomaly Detection 文章信息&am…

[笔记]ByteBuffer垃圾回收

参考&#xff1a;https://blog.csdn.net/lom9357bye/article/details/133702169 public static void main(String[] args) throws Throwable {List<Object> list new ArrayList<>();Thread thread new Thread(() -> {ByteBuffer byteBuffer ByteBuffer.alloc…

两种经典的现货白银假突破类型

假突破是现货白银市场中一种具有反大众性的市场行为。它通常和一种强势的市场行为突破联系在一起&#xff0c;但是它的方向是和突破完全相反的&#xff0c;识别假突破的类型&#xff0c;有助于降低我们亏损的风险&#xff0c;那如何识别呢&#xff1f;下面我们来介绍两种假突破…

rubymine 如何使用rubymine更新linux的ruby代码

第1步&#xff1a;配置SSH File | Settings | Tools | SSH Configurations 第2步&#xff1a;配置SFTP File | Settings | Build, Execution, Deployment | Deployment 第3步&#xff1a;使用 参考 rubymine remote远程linux同步代码 rubymine remote远程linux 并同步代码…

系列十四(面试)、谈谈你对StackOverflowError的理解?

一、StackOverflowError 1.1、概述 StackOverflowError是栈内存溢出的意思。栈中主要存储的是8种基本数据类型 引用类型 实例方法&#xff0c;栈的空间也是有限的&#xff0c;当存储进栈中的容量大于栈的最大容量时&#xff0c;就会报StackOverflowError的错误。 1.2、案例 …

一个网卡能设置(绑定)两个或多个IP

昨天领导问我&#xff0c;一个网卡设置两个IP。我就有点发愣&#xff1a;一个网卡能设置两个IP吗&#xff1f;我倒是见过一个机器插两个网卡&#xff0c;同时支持内网和外网。一个网卡设置两个IP&#xff0c;以谁为准&#xff1f; 上网搜索了一下&#xff0c;还真可以&#xff…

influxdb-cluster集群部署

一.下载安装包 略 二.集群文件配置修改 ip地址服务名称192.168.110.110influxdb,meta192.168.110.111influxdb,meta192.168.110.118meta 1.influxdb-meta.conf配置文件修改 meta至少三个节点修改配置比较简单 hostname "192.168.110.110" dir "/data/…