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

数据流的中位数

时间:2023-04-22 20:00:16浏览次数:31  
标签:q1 q2 top 中位数 num 数据流 size

数据流的中位数

题目:

对于数据流问题,需要设计一个在线系统,这个系统不断的接受一些数据,并维护这些数据的一些信息。中位数是有序列表中间的数。如果列表长度是偶数,中位数则是中间两个数的平均值。

请设计一个支持以下两种操作的系统:
+num——从数据流中添加一个整数 \(k\) 到系统中\((0 \leq k \leq 2^{32})\)。
? ——返回目前所有元素的中位数。

格式:

输入格式:

第一行输入一个整型 \(n(n\leq100000)\)

第二行输入 \(n\) 个操作

输出格式:

? 询问时输出中位数,每个操作一行,保证每次查询都合法

样例:

输出:

5
+ 1
+ 2
?
+ 3
?

输出

1.5
2

思路:

维护两个堆,小顶堆堆头为最大数,大顶堆堆头为最小数。

代码:

#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;

const int N = 100000;
priority_queue<int, vector<int>, less<int>> q1; // 大顶堆,存小一半的数
priority_queue<int, vector<int>, greater<int>> q2; // 小顶堆,存大一半的数

void insert (int num) {
    if (q1.size() > q2.size()) {
        q1.push(num);
        q2.push(q1.top());
        q1.pop();
    } else {
        q1.push(num);
        if (q2.size() != 0 && q1.top() > q2.top()) {
            q2.push(q1.top());
            q1.pop();
            q1.push(q2.top());
            q2.pop();
        }
    }
}

int main() {
    int n, num;
    cin >> n;
    while (n--) {
        char ch;
        cin >> ch;
        if (ch == '+') {
            cin >> num;
            insert(num);
        } else {
            if (q1.size() > q2.size()) {
                cout << q1.top() << endl;
            } else {
                cout << (float)(q1.top() + q2.top()) / 2 << endl;
            }
        }
    }
    return 0;
}

标签:q1,q2,top,中位数,num,数据流,size
From: https://www.cnblogs.com/catting123/p/17343790.html

相关文章

  • 数据流图(刷题)
         ......
  • 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=......
  • mipi数据流处理
    总体概览配置摄像头将摄像头配置为RAW10输出格式图像数据串转并将从两个lane通道接收的串行数据转换为byte类型数据字节对齐由于应用层原始数据打包后是byte形式,在传输时又转换成bit形式,在进行图像的逆过程时,需要保证一个byte数据的各个bit在是原来的byte数据通道......
  • 15.72011年42题真题_查找两个序列A和B的中位数
    #include<iostream>intMidSearch(int*A,int*B,intn){//分别表示序列A和序列B的首位数,末位数和中位数,s是start简写,d是end简写ints1=0,d1=n-1,m1,s2=0,d2=n-1,m2;//循环判断结束条件是,两个数组均不断删除最后均只能剩余一个元素while(......