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

算法训练|数据流中的中位数

LCR 160. 数据流中的中位数 - 力扣(LeetCode)

总结:这题自己最开始的想法是直接使用vector容器,每次取中位数的时候就进行一次排序,超时。题解很巧妙的利用大根堆和小根堆来解决问题,大根堆和小根堆各存一半的数,其中需要注意的是,小根堆里面存的是较大的数,然后堆顶就是这些数里面最小的数,大根堆里面存的是较小的数,堆顶就是这些数里面最大的数。这样就可以整体形成一个排好序的序列。

代码:

class MedianFinder {
public:
    /** initialize your data structure here. */
    priority_queue<int,vector<int>,greater<int>> A;
    priority_queue<int,vector<int>,less<int>> B;
    MedianFinder() {
        
    }
    
    void addNum(int num) {
        if(A.size() != B.size())
        {
            A.push(num);
            B.push(A.top());
            A.pop();
        }
        else
        {
            B.push(num);
            A.push(B.top());
            B.pop();
        }
    }
    
    double findMedian() {
        return A.size() != B.size() ? A.top() : (A.top() + B.top()) / 2.0;
    }

};


http://www.kler.cn/a/108997.html

相关文章:

  • Redis主从复制(replication)
  • redis实现消息队列的几种方式
  • 羊城杯2020Easyphp
  • Nebula NGQL语言的使用 一
  • 准确--FastDFS快速单节点部署
  • sql server启用远程连接与修改默认端口
  • Visual Studio Code的下载与安装
  • 电脑提示由于找不到vcruntime140.dll文件,教你四个解决方案
  • 中颖单片机SH367309全套量产PCM,专用动力电池保护板开发资料
  • Postgresqlddl在事务中可以回滚,truncate时relfilenode在当前会话会改变
  • Linux命令解压多个tar.gz包
  • rust学习
  • 关于错误javax.net.ssl.SSLException: Received close_notify during handshake
  • 腾讯云轻量应用服务器地域怎么选择比较好?
  • 两个list中存放相同的对象,一个是页面导入,一个是从数据库查询,外部传入一个集合存放的是对象的属性名称,根据属性名称处理两个list
  • 程序模拟(Concurrency Simulator, ACM/ICPC World Finals 1991, UVa210)rust解法
  • java集合之List接口实现类常用方法详解
  • Gitee 发行版
  • 【音视频】Linux | FFmpeg源码搭建
  • explain查询sql执行计划返回的字段的详细说明
  • LeetCode——哈希表(Java)
  • uni-app中tab选项卡的实现效果 @click=“clickTab(‘sell‘)“事件可传参数
  • No175.精选前端面试题,享受每天的挑战和学习
  • 【算法与数据结构】--算法应用--算法和数据结构的案例研究
  • ubuntu部署个人网盘nextCloud使用docker-compose方式
  • 性能优化必读 | AntDB-M高性能设计之线程池协程模型