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

例如,

[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

进阶:

  1. 如果数据流中所有整数都在 0 到 100 范围内,你将如何优化你的算法?
  2. 如果数据流中 99% 的整数都在 0 到 100 范围内,你将如何优化你的算法?

class MedianFinder {
public:
    /** initialize your data structure here. */
    MedianFinder() {
        
    }
    
    void addNum(int num) {
        small.push(num);
        large.push(-small.top());
        small.pop();
        if (small.size() < large.size()) {
            small.push(-large.top());
            large.pop();
        }
    }
    
    double findMedian() {
        return small.size() > large.size() ? small.top() : 0.5 *(small.top() - large.top());
    }
private:
    priority_queue<long> small, large;
};

/**
 * Your MedianFinder object will be instantiated and called as such:
 * MedianFinder obj = new MedianFinder();
 * obj.addNum(num);
 * double param_2 = obj.findMedian();
 */

295.数据流的中位数相关推荐

  1. 295. 数据流的中位数

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

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

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

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

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

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

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

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

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

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

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

  7. 一道简约而不简单的算法题——数据流的中位数 | 附动画解析

    作者 | 程序员小吴 转载自微信公众号(ID:CXYxiaowu) 题目来源于 LeetCode 上第 295 号问题:数据流的中位数.难度级别为 Hard,目前通过率为 33.5% . 题目描述 中 ...

  8. 堆实战(动态数据流求top k大元素,动态数据流求中位数)

    动态数据集合中求top k大元素 第1大,第2大 ...第k大 k是这群体里最小的所以要建立个小顶堆 只需要维护一个大小为k的小顶堆 即可当来的元素(newCome)> 堆顶元素(smallTo ...

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

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

  10. leetcode-295 数据流的中位数

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

最新文章

  1. CentOS-7.2部署OpenLDAP服务器以及客户端
  2. python下载安装教程3.8.0-Python3.8.0
  3. 三种睡眠时间函数的区别:linux 的sleep()、usleep()、nanosleep()函数
  4. Install Redis on CentOS 6.4--转
  5. ant design vue input change_Ant-design-vue项目实现动态路由
  6. 软件开发的核心是技术人员吗?
  7. THINKPHP聊天软件H5实时聊天室自动分配账户全开源商业源码
  8. C++ 一定要使用strcpy_s()函数 等来操作方法c_str()返回的指针
  9. java动态代理模式初解
  10. java classpath 理解
  11. PHP将swf转为gif,swf转gif 在线转换
  12. Linux 题库及答案永久开放共同学习进步
  13. React通用解决方案——浮层容器
  14. 美团java面试题_美团java面试题分享,一面
  15. 使用Android Studio 创建第一个Android 应用
  16. html怎么控制文字的行数,CSS3属性 line-clamp控制文本行数的使用
  17. poi操作word替换文本框里的内容
  18. Geronimo tomcat: 在 Apache Geronimo 插件体系中将 Apache Tomcat 这个优秀的 Web 容器整合至其中...
  19. iOS开发之3DTouch集成
  20. [ Laravel 5.5 文档 ] 快速入门 —— 使用 Laragon 在 Windows 中搭建 Laravel 开发环境

热门文章

  1. echart legends换行固定数量显示
  2. vue组件之间互相传值:兄弟组件通信
  3. DropDownList的AppendDataBoundItems属性
  4. vue学习笔记(五)— 组件通信
  5. logrotate日志转储
  6. 读《王垠-天才是什么》有感
  7. oracle 创建表同时添加注释
  8. Tomcat下work文件夹的作用
  9. 使用php glob函数查找文件,遍历文件目录(转)
  10. asp cms管理系统