文章目录

  • 1. 题目
  • 2. 大小堆解题

1. 题目

中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。

例如,
[2,3,4] 的中位数是 3
[2,3] 的中位数是 (2 + 3) / 2 = 2.5设计一个支持以下两种操作的数据结构:void addNum(int num) - 从数据流中添加一个整数到数据结构中。
double findMedian() - 返回目前所有元素的中位数。示例:
addNum(1)
addNum(2)
findMedian() -> 1.5
addNum(3)
findMedian() -> 2进阶:
如果数据流中所有整数都在 0 到 100 范围内,你将如何优化你的算法?
如果数据流中 99% 的整数都在 0 到 100 范围内,你将如何优化你的算法?

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/find-median-from-data-stream

《剑指Offer》同题:面试题41. 数据流中的中位数 链接

2. 大小堆解题

参考我的博客 数据结构 堆(优先队列)

类似题目:
LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)
LeetCode 703. 数据流中的第K大元素(优先队列)

  • 建立大顶堆(存放数据中较小的部分),小顶堆(存放较大的部分)
  • 同时维护两个堆的大小相等或者大顶堆多一个
  • 那么两个堆的堆顶就是中间的数据,根据奇偶,输出堆顶
class MedianFinder {priority_queue<int> maxHeap;priority_queue<int,vector<int>,greater<int>> minHeap;int n = 0;//数据计数
public:MedianFinder() {}void addNum(int num) {++n;if(maxHeap.size() <= minHeap.size()){if(maxHeap.empty() || num <= minHeap.top())maxHeap.push(num);else//(num > minHeap.top()){maxHeap.push(minHeap.top());minHeap.pop();minHeap.push(num);}              }else// maxHeap.size() > minHeap.size(){if(num < maxHeap.top()){minHeap.push(maxHeap.top());maxHeap.pop();maxHeap.push(num);}elseminHeap.push(num);}}double findMedian() {if(n%2 == 1)return maxHeap.top();return (maxHeap.top()+minHeap.top())/2.0;}
};


LeetCode 295. 数据流的中位数(大小堆)相关推荐

  1. LeetCode 295. 数据流的中位数 Hard难度

    295. 数据流的中位数 题目: 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 ...

  2. Leetcode 295. 数据流的中位数

    1.题目要求 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一个 ...

  3. 76. Leetcode 295. 数据流的中位数 (堆-技巧一-固定堆)

    技巧一 - 固定堆这个技巧指的是固定堆的大小 k 不变,代码上可通过每 pop 出去一个就 push 进来一个来实现.而由于初始堆可能是0,我们刚开始需要一个一个 push 进堆以达到堆的大小为k,因 ...

  4. 295. 数据流的中位数

    295. 数据流的中位数 欢迎大家参加每日一题系列并提供其他版本,在你也可以按照相同格式提供你的最新的每日一题题解. 每日一题系列 题目描述: 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是 ...

  5. [LeetCode][C++]数据流的中位数

    数据流的中位数 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 + 3) / 2 = 2.5 设计一 ...

  6. 力扣—— 295. 数据流的中位数(困难)

    目录 题目描述 问题分析 c++代码 题目描述 问题分析 使用大小堆来完成: 我们让最大堆总是大于最小堆一个量或者等于最小堆数量,中位数只可能是最大堆顶或最大堆与最小堆堆顶平均值. c++代码 cla ...

  7. 【leetcode】数据流的中位数

    一.题目描述 中位数是有序整数列表中的中间值.如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值. 例如 arr = [2,3,4] 的中位数是 3 . 例如 arr = [2,3] 的中 ...

  8. leetcode 480. 滑动窗口中位数(堆+滑动窗口)

    中位数是有序序列最中间的那个数.如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) / 2 = 2 ...

  9. LeetCode 480. 滑动窗口中位数(大小堆升级版+set实现)

    1. 题目 中位数是有序序列最中间的那个数. 如果序列的大小是偶数,则没有最中间的数:此时中位数是最中间的两个数的平均数. 例如: [2,3,4],中位数是 3 [2,3],中位数是 (2 + 3) ...

最新文章

  1. Android json请求格式与from表单格式
  2. 3层、5层、3层一个卷积核BP神经网络性能比较
  3. .Net读取xlsx文件Excel2007
  4. 北大校友的算法被玩出新高度,AI自动化在线抠图
  5. CodeIgniter URL添加后缀
  6. 两行命令实现 ubuntu 上自动更新 Vscode
  7. scala下划线的用法
  8. java persistence.xml_java – 找不到persistence.xml
  9. OVM-V1.2正式发布,新增实时监控功能,支持一键升级
  10. Spring Boot整合Druid的使用以及步骤
  11. 从Android发展看Meego
  12. nodejs脚本方式实现微信小程序代码自动上传生成体验版
  13. PHP多因子方案,多因子策略之冗余因子
  14. 高德地图纠偏 php,驾车轨迹纠偏-轨迹纠偏-示例中心-JS API 示例 | 高德地图API
  15. 一纬度横直线等于多公里_【归纳整理】高中地理必修一知识点总结
  16. 标梵微信小程序开发价格之做一个小程序要多少钱?
  17. Preparing: insert into user(uuid,username,gender,age,phone,address) values(?,?,?,?,?,?,?)
  18. 瑞星卡卡升级出现错误:kmon.dll.zip,错误代码:0x0/0x0(chech)
  19. GSoC 2022 Blender VSE: 第一周总结
  20. Linux服务器操作系统快速删除大量/大文件

热门文章

  1. unsigned int + int型结果分析
  2. Codeforces 360E 贪心 最短路
  3. STM32的PA15、PB3、 PB4管脚作普通管脚的解决办法
  4. iOStextField/textView在输入时限制emoji表情的输入
  5. django入门项目图书管理
  6. [洛谷P1231] 教辅的组成
  7. DateTime和字符串转换问题
  8. 面向对象的思想是什么?
  9. 我是这样分析Linux性能问题的
  10. 10个你可能没用过的linux命令