295. 数据流的中位数

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

例如,

[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

解题图解:













class MedianFinder {public:/** initialize your data structure here. */priority_queue<int,vector<int>,less<int>> big_heap;priority_queue<int,vector<int>,greater<int>> small_heap;MedianFinder() {}void addNum(int num) {if(big_heap.empty())  {big_heap.push(num);return ;}if(big_heap.size()==small_heap.size()){if(num<big_heap.top()) big_heap.push(num);else{small_heap.push(num);}}else if(big_heap.size()>small_heap.size()){if(num>big_heap.top()){small_heap.push(num);}else{small_heap.push(big_heap.top());big_heap.pop();big_heap.push(num);}}else if(big_heap.size()<small_heap.size()){if(num<small_heap.top()) big_heap.push(num);else{big_heap.push(small_heap.top());small_heap.pop();small_heap.push(num);}}}double findMedian() {if(big_heap.size()==small_heap.size()) return (( big_heap.top()+small_heap.top())/2.0) ;else if(big_heap.size()>small_heap.size())  return big_heap.top();else return small_heap.top();}
};/*** Your MedianFinder object will be instantiated and called as such:* MedianFinder* obj = new MedianFinder();* obj->addNum(num);* double param_2 = obj->findMedian();*/

个人总结:这里最难受的就是大小堆大小不相等的时候,你要把num跟堆顶比较,把num跟堆大小比较大的比较,这是最重要的。

LeetCode 295. 数据流的中位数 Hard难度相关推荐

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

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

  2. LeetCode 295. 数据流的中位数(大小堆)

    文章目录 1. 题目 2. 大小堆解题 1. 题目 中位数是有序列表中间的数.如果列表长度是偶数,中位数则是中间两个数的平均值. 例如, [2,3,4] 的中位数是 3 [2,3] 的中位数是 (2 ...

  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. 【leetcode】数据流的中位数

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

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

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

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

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

  9. LeetCode 703. 数据流中的第K大元素(优先队列)

    1. 题目 设计一个找到数据流中第K大元素的类(class). 注意是排序后的第K大元素,不是第K个不同的元素. 你的 KthLargest 类需要一个同时接收整数 k 和整数数组nums 的构造器, ...

最新文章

  1. Python取出列表相应值的位置(表处理)
  2. R语言R-markdown实战示例、R-markdown、R-markdown生成结果汇报的HTML文件
  3. 西门子Step7找不到有效授权的解决方法
  4. Java JUC之Atomic系列12大类实例讲解和原理分解
  5. 贪心---移掉K位数字
  6. 创建 Oracle 物理备用服务器
  7. 超图Cesium卷帘遇到的坑
  8. 无法打开文件“libboost_system-vc110-mt-gd-x32-1_68.lib”
  9. 把“~/niunantest.aspx”转成http://localhost:4532/test/niunantest.aspx的方法
  10. 【iOS之轮播视图、自定义UIPageControl】
  11. 无类IP地址与子网的算法
  12. [原创]Jenkins持续集成工具介绍
  13. JAVA Excel com组件_jacob java调用com组件基础运用
  14. 【神经网络】综合篇——人工神经网络、卷积神经网络、循环神经网络、生成对抗网络
  15. web留言板整蛊网站愚人节
  16. 使用H5开发移动端app
  17. INS/GNSS组合导航(五)惯性器件的主要误差
  18. 2020年营收仅62.5万,九城凭什么砸1亿美金购买矿机?
  19. 解决win10资源管理器关后电脑黑屏问题
  20. 智能计算机的功能有哪些功能,智能机器人有什么功能—智能机器人功能介绍

热门文章

  1. SGI重获新生 有望下月摆脱破产保护
  2. *用C#创建Windows服务(Windows Services)
  3. iOS APP上架被拒重新提交审核教程
  4. RabbitMQ接触(二)
  5. 近期window7x64 打补丁之后IE11x64无法启动
  6. 申论万用句型——背下来
  7. C结构体工具DirectStruct(综合示例二)
  8. 改进的二值图像像素标记算法及程序实现(含代码)
  9. 新一代組合創新架構師_學習地圖
  10. STM32F4 定时器TIM(1)定时器控制输出【使用库函数】