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

Leetcode 295. 数据流的中位数 堆

原题链接: Leetcode 295. 数据流的中位数

在这里插入图片描述
在这里插入图片描述
中位数查找思想:用两个堆维护数据(大顶堆存左半部分数据,小顶堆存右半部分数据),堆顶分别为左半最大值和右半最小值,可 O (1) 获取中位数。

解法1:官解

class MedianFinder {
public://大顶堆存左半部分数据, 堆顶为左半最大值priority_queue<int, vector<int> ,less<int>> quemin;// 小顶堆存右半部分数据, 堆顶为右半最小值priority_queue<int, vector<int> ,greater<int>> quemax;MedianFinder() {}// 整个序列长度偶数:quemin长度=quemax长度// 整个序列长度奇数:quemin长度=quemax长度+1void addNum(int num) {if(quemin.empty() || num<=quemin.top()){quemin.push(num);if(quemax.size()+1<quemin.size()){quemax.push(quemin.top());quemin.pop();}}else{quemax.push(num);if(quemax.size()>quemin.size()){quemin.push(quemax.top());quemax.pop();}}}double findMedian() {if(quemin.size() > quemax.size()) return quemin.top();return (quemin.top()+quemax.top()) / 2.0;}
};/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

解法2:

参考: 如何自然引入大小堆?简洁写法!(Python/Java/C++/Go/JS/Rust)

  • 如果整个序列长度偶数:left长度 = right长度
  • 如果整个序列长度奇数:left长度 = right长度+1

加入数字的过程中, 要时时刻刻满足以上两个要求,就可以用 left 中的最大值以及 right 中的最小值计算中位数。

分类讨论:

  1. 如果当前 left 的大小和 right 的大小相等:
  • 如果添加的数字 num 比较大
  • 如果添加的数字 num 比较小
  1. 如果当前 left 比 right 多 1 个数:
  • 如果添加的数字 num 比较大
  • 如果添加的数字 num 比较小
class MedianFinder {
public://大顶堆存左半部分数据, 堆顶为左半最大值priority_queue<int, vector<int> ,less<int>> left;// 小顶堆存右半部分数据, 堆顶为右半最小值priority_queue<int, vector<int> ,greater<int>> right;MedianFinder() {}// 整个序列长度偶数:left长度=right长度// 整个序列长度奇数:left长度=right长度+1void addNum(int num) {if(left.size()==right.size()){right.push(num);left.push(right.top());right.pop();}else{left.push(num);right.push(left.top());left.pop();}}double findMedian() {if(left.size() > right.size()) return left.top();return (left.top()+right.top()) / 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.dtcms.com/a/441882.html

相关文章:

  • Go 语言的 channel
  • python包管理器——uv
  • 【LeetCode】92. 反转链表 II
  • LeetCode:90.最长有效括号
  • AI 重塑行业格局:从金融风控到智能制造的深度实践
  • 网站开发公共文件太仓营销型网站建设
  • MSM多标量乘法:策略及挑战
  • 做58一样的网站网站如何在国外推广
  • Vue渲染—深入VNode(h函数、JSX、render函数)
  • GPT_Data_Processing_Tutorial
  • 华为AC+AP无线网络组网与配置指南
  • 交互动效设计
  • 电子商务网站建设与管理相关文献邢台路桥建设总公司没有网站吗
  • Leetcode 3700. Number of ZigZag Arrays II
  • Turbopack介绍(由Vercel开发的基于Rust的高性能前端构建工具,用于挑战传统构建工具Webpack、vite地位)Next.js推荐构建工具
  • 网站自适应 如何做ui设计可以从事什么工作
  • 【学习记录】宝塔面板 + Docker 快速部署 RustDesk 自建远程控制服务器
  • 【3DGS复现】Autodl服务器复现3DGS《简单快速》《一次成功》《新手练习复现必备》
  • ollama的下载以及Spring AI Alibaba的ChatModel和ChatClient的流式输出和在idea的实现
  • 自己搭建服务器 发布网站 域名如何申请深圳专业做网站专业
  • 【pytest】fixture 内省(Introspection)测试上下文
  • 【开题答辩实录分享】以《基于python的奶茶店分布数据分析与可视化》为例进行答辩实录分享
  • 嵌入式硬件——基于IMX6ULL的I2C实现
  • 【ROS2学习笔记】分布式通信
  • 唐尧文化 网站建设工作总结邢台手机网站制作
  • 心脏病监测数据可视化分析
  • 【机器人】WMNav 将VLM融入世界模型 | 零样本目标导航 | IROS‘25
  • 第七课(零基础友好版)|机器学习像养宠物:数据—训练—测试(五年级·自学)
  • 无法解析插件 org.apache.maven.plugins:maven-site-plugin:3.12.1
  • 即墨网站建设哪里有安卓app怎么开发