首页 > 其他分享 >数据流的中位数

数据流的中位数

时间:2023-04-24 20:15:25浏览次数:40  
标签:int top 中位数 num queMax 数据流 MedianFinder queMin

一. 数组

添加线性,访问常数
class MedianFinder {
public:
    MedianFinder() {
        n = 0;
    }
    void addNum(int num) {
        n++;
        nums.push_back(num);
        int index = n - 1;
        for(int i=index;i>0;i--)
            if(nums[i]<nums[i-1]) swap(nums[i],nums[i-1]);
    }
    double findMedian() {
        if(n%2==0) return (nums[n/2]+nums[n/2-1])*1.0/2;
        else return nums[n/2];
    }
    private:
        vector<int> nums;
        int n;
};

二. 双优先队列(大根堆小根堆)

class MedianFinder {
public:
    priority_queue<int, vector<int>, less<int>> queMin;//大根堆存储更小值
    priority_queue<int, vector<int>, greater<int>> queMax;//小根堆存储更大值

    MedianFinder() {}
    void addNum(int num) { 
        if (queMin.empty() || num <= queMin.top()) {//优先放大根堆
            queMin.push(num);
            if (queMax.size() + 1 < queMin.size()) {//个数差距为2,进行平衡
                queMax.push(queMin.top());
                queMin.pop();
            }
        } else {
            queMax.push(num);
            if (queMax.size() > queMin.size()) {//进行平衡
                queMin.push(queMax.top());
                queMax.pop();
            }
        }
    }

    double findMedian() {
        if (queMin.size() > queMax.size())//总个数为奇数
            return queMin.top();//返回小根堆顶部
        return (queMin.top() + queMax.top()) / 2.0;
    }
};

标签:int,top,中位数,num,queMax,数据流,MedianFinder,queMin
From: https://www.cnblogs.com/929code/p/17350699.html

相关文章

  • Oracle SQL 四分位 上四分位 下四分位 中位数
    OracleSQL四分位上四分位下四分位中位数平均值方差最大值最小值------------------------SQL四分位上四分位下四分位中位数----------------------SELECTPROD_ID,STAGE_ID,STEP_ID,RECIPE_ID,LOT_PRI,LOT_SIZE,PERCENTILE_CONT(0.25)WITHINGROUP(ORDE......
  • 数据流的中位数
    数据流的中位数题目:对于数据流问题,需要设计一个在线系统,这个系统不断的接受一些数据,并维护这些数据的一些信息。中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。请设计一个支持以下两种操作的系统:+num——从数据流中添加一个整数\(k\)到系统中......
  • 数据流图(刷题)
         ......
  • hdoj 简易版之最短距离 2083 (取中位数)水
    简易版之最短距离TimeLimit:1000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):15746    AcceptedSubmission(s):6979ProblemDescription寒假的时候,ACBOY要去拜访很多朋友,恰巧他所......
  • python计算list的均值,方差,众数,中位数的最好方法
    可以使用Python的统计模块statistics来计算列表的均值、方差、中位数等,下面是一些示例代码:importstatistics#定义一个列表my_list=[1,2,3,4,5]#计算均值mean=statistics.mean(my_list)print("均值:",mean)#计算方差variance=statistics.variance(m......
  • react的思想和数据流
    最近忙着写前端界面,粗略讨论以下react的函数式编程思想和组件通信的应对思路。纯函数和副作用函数式编程中函数是一等公民。一个函数的返回值只取决于输入参数时,那么这个函数的行为是确定的,我们称之为纯函数。那么反过来,如果函数的输入参数相同,而返回值不确定,那么该函数就是有......
  • Nginx之数据流代理stream模块简介和使用
    转自 http://t.csdn.cn/RV4Hi一、stream模块简介  stream模块一般用于TCP/UDP数据流的代理和负载均衡,通过stream模块我们可以代理转发tcp报文。ngx_stream_core_module模块从1.9.0版开始提供。默认情况下,此模块不是构建的,应该使用–withstream配置参数启用它,即我们需要使用.......
  • 基于 RocketMQ Connect 构建数据流转处理平台
    作者:周波,阿里云智能高级开发工程师,ApacheRocketMQCommitter01从问题中来的RocketMQ Connect在电商系统、金融系统及物流系统,我们经常可以看到RocketMQ的身影。原因不难理解,随着数字化转型范围的扩大及进程的加快,业务系统的数据也在每日暴增,此时为了保证系统的稳定运行,就需......
  • 基于 RocketMQ Connect 构建数据流转处理平台
    作者:周波,阿里云智能高级开发工程师,ApacheRocketMQCommitter01从问题中来的RocketMQ Connect在电商系统、金融系统及物流系统,我们经常可以看到RocketMQ的身影。原因不难理解,随着数字化转型范围的扩大及进程的加快,业务系统的数据也在每日暴增,此时为了保证系统的稳定运行,就......
  • 寻找两个正序数组的中位数
    题目描述难度困难给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的中位数。算法的时间复杂度应该为O(log(m+n))。示例1:输入:nums1=[1,3],nums2=[2]输出:2.00000解释:合并数组=[1,2,3],中位数2示例2:输入:nums1=......