1202-数据流中的中位数

news/2024/12/2 23:42:46/文章来源:https://www.cnblogs.com/hgao/p/18583047

最小栈 leetcode 295.

题目大意:给定一个数据流,实现一个以查找中位数为方法的类,该类需要有初始化构造方法、新增数据值和查找中位数的方法
解题思路:主要难点是想用什么方法,这题肯定不能来一个数字就给数据排序,得用到数据结构,也就是小顶堆和大顶堆,小顶堆存储最大值部分,大顶堆存储最小值部分,默认以小顶堆多一个(如果出现数据流长度为奇数堆的情况下),这里有一个滑动入值的概念,当两个堆大小不一致时,肯定是小顶堆多于大顶堆了,这时候我得先将该新数字放进小顶堆中过滤(排序)一遍后再将新的小顶堆的堆顶取出来放到大顶堆中去,这样就不会破坏小顶堆的值是大于大顶堆的值的原则,且是排序了的。当两个堆大小一致时,同理。查找中位数的话就是判断是否大小一致,如果两个堆大小一致就说明是偶数,那就将两个堆堆顶拿到/2就可以了,不一致的话我们设定了小顶堆的大小是>=大顶堆的,所以直接拿出小顶堆的堆顶即可。

class MedianFinder {Queue<Integer> A,B;public MedianFinder() {A = new PriorityQueue<>();B = new PriorityQueue<>((a, b) -> (b - a));}public void addNum(int num) {if(A.size() != B.size()) {A.add(num);B.add(A.poll());} else{B.add(num);A.add(B.poll());}}public double findMedian() {return A.size() == B.size() ? (A.peek() + B.peek()) / 2.0 : A.peek() * 1.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.hqwc.cn/news/845675.html

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

相关文章

《痞子衡嵌入式半月刊》 第 112 期

痞子衡嵌入式半月刊: 第 112 期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《…

学习高校课程-系统设计与分析-优化设计(lec8)

将用例行为分发到类 对于每个事件用例流:确定分析类 ,将用例职责分配给分析类 ,在交互图中对分析类交互进行建模描述职责 做什么:创建对象,执行计算,对其他对象的初始化操作,控制和协调工作...... 知道什么:关于私有封装数据,关于相关对象,关于他可以推导和计算的事物…

使用CloudDrive 将网盘挂载本地(网盘本地化,超简单)

使用CloudDrive 将网盘挂载本地(网盘本地化,超简单) 创建时间:20241122 一、介绍 免费的,可以将两个网盘挂载在本地。可实现不用登陆即可 下载。很好用。 之前还有一个alist+RaiDrive 可以免费挂载很多(我觉得没必要懒得搞没搞那个,这个也够用了。感兴趣的可以去试试那…

manim边做边学--曲面

Surface类是Manim中专为创建和操控复杂的三维表面而打造的。 在实际应用中,无论是创建数学教学中的几何模型,还是模拟物理现象中的曲面变化,甚至是构建复杂的动画场景中的三维元素,Surface类都能以其强大的功能和灵活性满足我们的需求。 通过Surface类的参数和方法,我们可…

mac通过网线连接主机(fnOS)

一、mac端 mac是typec的,用了个转接头+网线直连主机,初始化的时候跟下面一致,默认都是自动的点击详细信息,配置IPv4选择使用DHCP二、主机端 主机端是最麻烦的,刚开始的时候怎么也找不到网卡,ifconfg敲了很多遍,最后发现是fnOS没有装驱动。。。 root@server:~# sudo lshw…

05_VIM编辑器

VIM编辑器 一、VIM编辑器的工作模式命令行模式 用户刚刚启动 vi/vim,便进入了命令模式。控制屏幕光标的移动,字符、字或行的删除,移动、复制某区域及进入插入模式,或者到末行模式插入模式 只有在插入模式下才可以做文本输入,按“ESC”键可回到命令行模式末行模式 在命令模…

HTTP协议基础

总结了HTTP协议的一些基础知识。HTTP协议基础 一.定义 HTTP协议(HyperText Transfer Protocol),超文本传输协议,它是一种客户端(如网页浏览器)和服务器端(如网站服务器)之间进行通信、请求与响应数据的规则集合。通过 HTTP 协议,客户端可以向服务器发起获取网页、图片…

Power Automate 获取通讯组的成员

前言最近,想要看看某个Group里都有哪些人正文在Power Automate里可以用Office 365 Groups这个连接器里的操作,先根据邮件地址获取到Group,然后用Group Id获取Group即可获取到Group members的截图获取结果的JSON[{"@odata.type": "#microsoft.graph.user"…

实验5.继承和多态

1.实验任务1: publisher.hpp:#pragma once#include <iostream> #include <string>using std::cout; using std::endl; using std::string;// 发行/出版物类:Publisher (抽象类) class Publisher { public:Publisher(const string &s = ""); …

PTQ 精度 Debug 工具

01 前言 使用 PTQ 后量化的模型量化方案,可以帮助用户非常简单便捷地完成从浮点模型到地平线混合异构模型的转换,模型转换工具会基于用户提供的校准样本对模型进行校准量化并保障模型高效地部署在地平线计算平台上。 但是在模型转换的过程中,不可避免地会因为浮点高精度到定…

字符串的遍历、统计字符案例

1.两种字符串遍历方法1.toCharArray 将字符串转换成一个新的字符类型的数组 调用方式:对象.如图,其实就相当于把字符串全部拆开,变成一个个的字符,再由字符数组来接收2.charAt 根据输入的索引,从字符串里找出对应的字符 调用方法:对象. 如图如果我们要遍历字符串,那不就…