NC131 随时找到数据流的中位数

本文介绍了如何设计一个名为MedianHolder的结构,以在O(logN)的时间复杂度内添加新数,并能在O(1)的时间复杂度内获取数据流的中位数。问题要求在数据流不断更新时,能即时维护中位数。解决方案包括使用排序列表或堆排序的方法,以确保中位数的实时性。
摘要由CSDN通过智能技术生成

描述

有一个源源不断的吐出整数的数据流,假设你有足够的空间来保存吐出的数。请设计一个名叫MedianHolder的结构,MedianHolder可以随时取得之前吐出所有数的中位数。
[要求]
1. 如果MedianHolder已经保存了吐出的N个数,那么将一个新数加入到MedianHolder的过程,其时间复杂度是O(logN)。

2. 取得已经吐出的N个数整体的中位数的过程,时间复杂度为O(1)

每行有一个整数opt表示操作类型

若opt=1,则接下来有一个整数N表示将N加入到结构中。
若opt=2,则表示询问当前所有数的中位数
 

示例1

输入:

[[1,5],[2],[1,3],[2],[1,6],[2],[1,7],[2]]

复制返回值:

[5,4,5,5.5]

复制说明:

第一次查询时结构内的数为:5
第二次查询时结构内的数为:3 5
第二次查询时结构内的数为:3 5 6
第二次查询时结构内的数为:3 5 6 7

思路1

  • 列表,排序;本题要求实现数据结构能够随时找出数据流的中位数,所以该数据结构需要依据数据的添加实时更新中位数;
  • 中位数(Median)又称中值,统计学中的专有名词,是按顺序排列的一组数据中居于中间位置的数;对于奇数个取中间值,对于偶数个数据则取中间两个值的平均值;
  • 故可以使用列表来存储数据,并且在每次添加数据时,对列表进行一次升序排序,并找出新列表的中位数,更新中位数的记录&#
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据流词频统计是一种分析方法,可以用来了解数据流中不同词语出现的频率。可以通过使用Linux系统自带的nc程序来模拟生成数据流。 在Linux系统中,nc(netcat)是一个网络工具,它可以用来建立TCP或UDP连接,同时也可以作为一个简单的服务器或客户端使用。我们可以使用nc程序来生成模拟的数据流,并以一定的频率发送数据。 首先,在Linux命令行中使用以下命令启动nc程序并将其作为服务器: ``` nc -l -p 1234 ``` 这将启动一个nc服务器,监听本地端口1234。 接下来,我们可以使用脚本或其他方式来模拟生成数据流,将数据发送到nc服务器。以下是一个简单的示例脚本,可以生成一些随机的文本数据并发送给nc服务器: ```#!/bin/bash for i in {1..100}; do echo "This is a sample data stream" | nc localhost 1234 sleep 1 done ``` 该脚本将在每次循环中向nc服务器发送一条数据,循环100次,并在每次发送之间暂停1秒。 在nc服务器上,可以使用管道和其他命令来对数据流进行词频统计。以下是一个简单的示例命令,可以基于接收到的数据流进行词频统计: ``` nc -l -p 1234 | tr ' ' '\n' | sort | uniq -c ``` 该命令将从nc服务器接收数据流,并通过管道传递给tr命令,将空格分隔的词语转换为每行一个词语的形式。然后,数据流被传递给sort命令进行排序,并最终传递给uniq -c命令进行词频统计。 通过这种方式,我们可以使用linux系统自带的nc程序来模拟生成数据流,并使用一些命令对数据流进行词频统计。这样就可以了解数据流中不同词语的频率分布情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值