当前位置: 首页 > news >正文

295. 数据流的中位数

https://leetcode.cn/problems/find-median-from-data-stream/description/?envType=study-plan-v2&envId=top-interview-150

思路:我们维护两个堆,一个是大顶堆(存放小于等于中位数),一个小顶堆(存放大于中位数的数),我们需要维护使这两个堆大小差不超过1(小顶堆的数量永远小于等于大顶堆),这样当两个堆的数量和是奇数的时候大顶堆的堆顶元素就是中位数,是偶数的时候就是两个堆的堆定元素和除2。

class MedianFinder {PriorityQueue<Integer> maxHeap; // 大顶堆PriorityQueue<Integer> minHeap; // 小顶堆Double mid;// 中位数public MedianFinder() {this.maxHeap = new PriorityQueue<>(((o1, o2) -> o2 - o1));this.minHeap = new PriorityQueue<>();}public void addNum(int num) {if(this.mid == null) { // 第一个元素我们放入大顶堆并维护一下midmaxHeap.add(num);} else {if(num > mid) {minHeap.add(num);if(minHeap.size() > maxHeap.size()) {// 如果小顶堆的元素比大顶堆多,我们需要将小顶堆的堆顶元素放入大顶堆maxHeap.add(minHeap.poll());}} else {maxHeap.add(num);if(maxHeap.size() > minHeap.size() + 1) { // 如果大顶堆的元素比小顶堆多超过1,我们需要将大顶堆的堆顶元素放入小顶堆minHeap.add(maxHeap.poll());}}}// 维护midmid = (double) maxHeap.peek();if(maxHeap.size() == minHeap.size()) {this.mid = (maxHeap.peek() + minHeap.peek()) * 1.0 / 2;}}public double findMedian() {return this.mid;}}

相关文章:

  • 二、Kubernetes 环境搭建
  • CA-Net复现
  • 8、电解电容—数据手册解读
  • 为什么使用 ./ 表示当前目录:深入解析路径表示法的起源与原理
  • 7.4-Creating data loaders for an instruction dataset
  • Nacos 2.4.3 登录配置
  • Day43
  • Day43 Python打卡训练营
  • Flickr30k Entities 短语定位评测沉浸式代码指南
  • 手机归属地查询接口如何用Java调用?
  • comfyui利用 SkyReels-V2直接生成长视频本地部署问题总结 2 :寻找丢失的model 和工作流中 get set 方法的应用
  • 新版智慧社区(小区)智能化弱电系统解决方案
  • 第18讲、Odoo接口开发详解:原理、类型与实践
  • 【CF】Day73——Codeforces Round 887 (Div. 2) B (思维 + 模拟)
  • 20250602在Ubuntu20.04.6下修改压缩包的日期和时间
  • 内网应用如何实现外网访问?无公网IP本地端口网址服务提供互联网连接
  • python打卡day43@浙大疏锦行
  • 软件开发项目管理工具选型及禅道开源版安装
  • 从0开始学vue:vue3和vue2的关系
  • 《信号与系统》--期末总结V1.0
  • 可以做外贸的网站有哪些/app网站
  • 快速做效果图的网站叫什么/微信最好用的营销软件
  • PHP网站开发程序员招聘/浏览器网址
  • 案例较少如何做设计公司网站/适合企业员工培训的课程
  • 网站有必要备案吗/百度站长工具域名查询
  • 公安局网站建设方案/市场营销案例分析及解答