【LeetCode: 295. 数据流的中位数 + 堆】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 堆
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 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 以内的答案将被接受。

示例 1:

输入
[“MedianFinder”, “addNum”, “addNum”, “findMedian”, “addNum”, “findMedian”]
[[], [1], [2], [], [3], []]
输出
[null, null, null, 1.5, null, 2.0]

解释
MedianFinder medianFinder = new MedianFinder();
medianFinder.addNum(1); // arr = [1]
medianFinder.addNum(2); // arr = [1, 2]
medianFinder.findMedian(); // 返回 1.5 ((1 + 2) / 2)
medianFinder.addNum(3); // arr[1, 2, 3]
medianFinder.findMedian(); // return 2.0
提示:

-105 <= num <= 105
在调用 findMedian 之前,数据结构中至少有一个元素
最多 5 * 104 次调用 addNum 和 findMedian

🌟 求解思路&实现代码&运行结果


⚡ 堆

🥦 求解思路
  1. 该题目看似简单,其实还是比较困难,第一次做的小伙伴可以参考官方题解
  2. 求解该题目我们需要维护俩个优先队列,一个是大根堆,一个是小根堆,每次添加元素的时候,如果此时俩个优先队列长度不相等,先进小根堆,然后弹出小根堆堆顶的元素,将弹出的元素放到大根堆中。相反,如果此时俩个优先队列长度相等,那么先进大根堆,弹出堆顶的元素,进入小根堆。
  3. 如果是求解中位数的操作,还需要判断此时俩个队列的长度,如果不相等,直接返回小根堆堆顶的元素,如果队列长度相等,那就取得俩个堆的堆顶元素,然后除2,得到结果。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class MedianFinder {PriorityQueue<Integer> maxHeap;PriorityQueue<Integer> minHeap;public MedianFinder() {maxHeap = new PriorityQueue<Integer>((x, y) -> (y - x));minHeap = new PriorityQueue<Integer>();}public void addNum(int num) {if (maxHeap.size() != minHeap.size()) {minHeap.add(num);maxHeap.add(minHeap.poll());} else {maxHeap.add(num);minHeap.add(maxHeap.poll());}}public double findMedian() {if (maxHeap.size() != minHeap.size()) {return minHeap.peek();} else {return (maxHeap.peek() + minHeap.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.mzph.cn/news/636895.shtml

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

相关文章

list列表可编辑状态

有时候list需要修改或选择属性,mfc自带的只能显示内容,基本上是不可以修改,为了实现这个功能需求,需要完成一下步骤转换. 第一步记录选择的单元格. 第二步创建一个编辑框CComboBox对象, 设置字体,窗口属性. 第三步获取选中单元格的位置信息. 第四步获取单元格内容信息. 第五步…

Leetcode3005. 最大频率元素计数

Every day a Leetcode 题目来源&#xff1a;3005. 最大频率元素计数 解法1&#xff1a;遍历 哈希 遍历数组 nums&#xff0c;统计各元素 num 的出现次数&#xff0c;存储在哈希表 cnt 中。 初始化 sum 0&#xff0c;max_freq 0。 遍历哈希表 cnt&#xff1a; 如果当前…

v34.运算符的优先级 和 结合性

1.优先级 优先级高的运算符会首先被评估。 2.结合性 当运算符的优先级相同时&#xff0c;结合性就会发挥作用。 3.优先级很重要 &#xff08;&#xff09;的优先级大于&#xff0c;所以操作数fun属于&#xff08;&#xff09; 而不是 &#xff0c;所以这个表达式看做是将函数…

【DevOps-09-1】Jenkins流水线任务初体验

一、简要描述 Jenkins流水线任务介绍Jenkins流水线任务初体验Jenkins流水线任务脚本语法初体验Jenkinsfile维护脚本二、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程…

基于蒙特卡洛模拟的家用电动汽车充电负荷预测(MATLAB实现)

采用蒙特卡洛模拟法&#xff0c;对家用电动汽车充电负荷进行预测&#xff0c;电动汽车分为快、中、慢三种充电功率&#xff0c;且分为一天一充、一天两充、一天三充三种类型。全部MATLAB代码在下方给出&#xff0c;可以直接运行。 %%%%%%%%%%%%%%%%%%%%%%%%输入电动汽车相关原…

Spark读取kafka(流式和批数据)

spark读取kafka&#xff08;批数据处理&#xff09; # 按照偏移量读取kafka数据 from pyspark.sql import SparkSessionss SparkSession.builder.getOrCreate()# spark读取kafka options {# 写kafka配置信息# 指定kafka的连接的broker服务节点信息kafka.bootstrap.servers: n…

beego的模块篇 - config自定义文件配置

加载自定义配置到beego.AppConfig中可以配置&#xff1a;Beego框架 app.conf配置参数及环境配置-CSDN博客 1. 文件配置 目前支持解析的文件格式有 ini、json、xml、yaml 安装依赖库&#xff1a; go get github.com/beego/beego/v2/core/config 1.1 ini文件配置使用 配置文…

【机器学习300问】13、学习率曲线有什么作用?

在之前的文章中我为大家详细介绍了学习率的概念以及学习率设置过大或者过小分别有什么坏处。如果您还未看相关内容&#xff0c;下面是跳转链接哦&#xff1a; 【机器学习300问】10、学习率设置过大或过小对训练有何影响&#xff1f; 本篇文章中&#xff0c;为大家介绍一个工具—…

集美大学“第15届蓝桥杯大赛(软件类)“校内选拔赛 D矩阵选数

经典的状态压缩DP int dp[15][(1<<14)10]; int a[15][15]; void solve() {//dp[i][st]考虑到了第i行 并且当前考虑完第i行以后的选择状态是st的所有方案中的最大值for(int i1;i<13;i)for(int j1;j<13;j)cin>>a[i][j];for(int i1;i<13;i){for(int j0;j<…

宝塔 ftp 服务器发回了不可路由的地址/读取目录列表失败

ftp连接不上&#xff1a; 1.注意内网IP和外网IP 2.检查ftp服务是否启动 &#xff08;面板首页即可看到&#xff09; 3.检查防火墙20端口 ftp 21端口及被动端口39000 - 40000是否放行 &#xff08;如是腾讯云/阿里云等还需检查安全组&#xff09; 4.是否主动/被动模式都不能连接…

相比于 Jira,极狐GitLab 的敏捷项目管理是怎样的?

本文作者 极狐GitLab 资深解决方案架构师 尹学峰 简述 写在前面的话 如果你目前没有用任何专门的项目管理软件&#xff0c;只是在使用word、excel之类的通用软件进行项目管理&#xff0c;建议直接阅读本文详述章节&#xff0c;极狐GitLab的项目管理工具将为你带来巨大的效率提…

Linux安全问题,如何查看哪个用户是可疑用户?如何批量删除这些用户?

目 录 一、可疑用户是一个安全问题 二、查看Linux用户、新建的用户 &#xff08;一&#xff09;Linux里查看所有用户的命令 1、直接查看/etc/passwd文件 2、使用getent passwd命令查看 3、字段解释 4、用户信息解释 &#xff08;二&#xff09;只查看…

logstack 日志技术栈-04-opensource 开源工具 Syslog-ng+Highlight.io

5. Syslog-ng Syslog-ng 是一个开源的日志管理解决方案&#xff0c;主要用于收集和处理日志数据。它可以从多种源收集日志&#xff0c;包括系统日志、网络设备日志和第三方应用日志。 然后将日志解析、分类、重写和关联到统一格式中&#xff0c;然后将其存储或安全地传输到不同…

[ tool ] Xpath选择器和selenium工具基本使用

XPath xpath介绍 是一门在XML文档中查找信息的语言 html文档准备 doc <html><head><base hrefhttp://example.com/ /><title>Example website</title></head><body><div idimages><a hrefimage1.html aabb>Name: My…

JVM工作原理与实战(二十一):内存管理

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、不同语言的内存管理 1.C/C的内存管理 2.Java的内存管理 二、垃圾回收的对比 1.自动垃圾回收与手动垃圾回收的对比 2.优点与缺点 总结 前言 JVM作为Java程序的运行环境&#…

区字棋中的最长非0链

一&#xff0c;区字棋 也叫憋死牛棋。 规则&#xff1a; 棋盘一共只有5个点&#xff0c;双方各2个棋子&#xff0c;还有一个空格。 先手必须移动左边的棋子&#xff0c;之后没有限制&#xff0c;2个棋子任意一个移动到空格皆可。 无法移动者判负。 二&#xff0c;不败策略…

vue对axios进行二次封装

前言 在Vue中&#xff0c;对Axios进行二次封装可以提高代码的可重用性和可维护性。通过封装&#xff0c;我们可以将请求的配置、错误处理和拦截器等逻辑集中到一个地方&#xff0c;方便后续的修改和扩展。此外&#xff0c;封装Axios还可以简化代码&#xff0c;减少重复的请求配…

ubuntu20遇到缺少qt4相关库的问题

最近需要做套接字通讯的工作&#xff0c;最好是有一个网络调试软件能够接受或者发送套接字&#xff0c;测试代码能够正常通讯。windows下有很多&#xff0c;但是linux下比较少&#xff0c;使用广泛的是下面这一款。 1、安装 首先从网盘&#xff08;链接: https://pan.baidu.c…

String在VS与Linux下的区别

目录 一、string的成员 1.VS 2.Linux 二、string的扩容机制 1. VS 2.Linux 一、string的成员 string是C标准库中的一个类模板&#xff0c;用于表示和操作字符串 string在 Windows 与 Linux 中的成员不是相同的 1.VS 4个成员&#xff1a;_str , _size , _capacity 和…

71.工作中redis的常用场景总结

文章目录 一、简介二、统计访问次数三、缓存四、分布式锁五、限流六、排行榜七、作为Session的存储器&#xff0c;存用户登录状态八、位统计九、生成全局ID 一、简介 Redis作为一种优秀的基于key/value的缓存&#xff0c;有非常不错的性能和稳定性&#xff0c;无论是在工作中&…