当前位置: 首页 > 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/news/108997.html

相关文章:

  • 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高性能设计之线程池协程模型
  • Docker底层原理:Cgroup V2的使用
  • centos7 部署 Flink
  • 设计模式——单例模式详解
  • 随笔:使用Python爬取知乎上相关问题的所有回答
  • 【CSS】伪类和伪元素
  • C#WPFPrism框架导航应用实例
  • sprinbboot 2.7启动不生成日志文件
  • 电子电器架构 —— 车载网关初入门(二)
  • 【C++代码】爬楼梯,不同路径,整数拆分,不同搜索树,动态规划--代码随想录
  • 泰州市旅游景点门票预订管理系统 vue+uniapp微信小程序