当前位置: 首页 > 面试题库 >

谈一谈,如何得到一个数据流中的中位数?

滕胜涝
2023-03-14
本文向大家介绍谈一谈,如何得到一个数据流中的中位数?相关面试题,主要包含被问及谈一谈,如何得到一个数据流中的中位数?时的应答技巧和注意事项,需要的朋友参考一下

考察点:排序

数据是从一个数据流中读出来的,数据的数目随着时间的变化而增加。如果用一个数据容器来保存从流中读出来的数据,当有新的数据流中读出来时,这些数据就插入到数据容器中。

数组是最简单的容器。如果数组没有排序,可以用 Partition 函数找出数组中的中位数。在没有排序的数组中插入一个数字和找出中位数的时间复杂度是 O(1)和 O(n)。

我们还可以往数组里插入新数据时让数组保持排序,这是由于可能要移动 O(n)个数,因此需要 O(n)时间才能完成插入操作。在已经排好序的数组中找出中位数是一个简单的操作,只需要 O(1)时间即可完成。

排序的链表时另外一个选择。我们需要 O(n)时间才能在链表中找到合适的位置插入新的数据。如果定义两个指针指向链表的中间结点(如果链表的结点数目是奇数,那么这两个指针指向同一个结点),那么可以在 O(1)时间得出中位数。此时时间效率与及基于排序的数组的时间效率一样。

如果能够保证数据容器左边的数据都小于右边的数据,这样即使左、右两边内部的数据没有排序,也可以根据左边最大的数及右边最小的数得到中位数。如何快速从一个容器中找出最大数?用最大堆实现这个数据容器,因为位于堆顶的就是最大的数据。同样,也可以快速从最小堆中找出最小数。

因此可以用如下思路来解决这个问题:用一个最大堆实现左边的数据容器,用最小堆实现右边的数据容器。往堆中插入一个数据的时间效率是 O(logn)。由于只需 O(1)时间就可以得到位于堆顶的数据,因此得到中位数的时间效率是 O(1)。

 类似资料:
  • 本文向大家介绍请谈一谈 Kafka 数据一致性原理?相关面试题,主要包含被问及请谈一谈 Kafka 数据一致性原理?时的应答技巧和注意事项,需要的朋友参考一下 一致性就是说不论是老的 Leader 还是新选举的 Leader,Consumer 都能读到一样的数据。 如果想及时了解Spark、Hadoop或者HBase相关的文章,欢迎关注微信公众号:iteblog_hadoop 假设分区的副本为3,

  • 本文向大家介绍谈谈数据库的字段设计的几个心得,包括了谈谈数据库的字段设计的几个心得的使用技巧和注意事项,需要的朋友参考一下 数据库的字段设计有很多细节性的技巧,下面将过去在开发中体会到经验整理出来,做个备忘。 tinyint 是-128到128 。当属性设置为unsigned的时候。最大值就是255了。现在知道为什么需要设置为unsigned属性了。原来是为了最大限度的使用给予的存储空间。如果不设

  • 本文向大家介绍谈一谈,JDBC中如何进行事务处理?相关面试题,主要包含被问及谈一谈,JDBC中如何进行事务处理?时的应答技巧和注意事项,需要的朋友参考一下 考察点:数据库   Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务;当事务完成后用commit()显式提交事务;如果在事务处理过程中发生异常则通过rollback()进行事务回滚。

  • 本文向大家介绍简单谈一谈Java中的Unsafe类,包括了简单谈一谈Java中的Unsafe类的使用技巧和注意事项,需要的朋友参考一下 Unsafe类是啥? Java最初被设计为一种安全的受控环境。尽管如此,Java HotSpot还是包含了一个“后门”,提供了一些可以直接操控内存和线程的低层次操作。这个后门类——sun.misc.Unsafe——被JDK广泛用于自己的包中,如java.nio和j

  • 我想要这样的结果。依靠这个数组,我想在其中得到一个随机值。

  • 本文向大家介绍谈一谈 Kafka 的再均衡相关面试题,主要包含被问及谈一谈 Kafka 的再均衡时的应答技巧和注意事项,需要的朋友参考一下 在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触发Rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消费者)机制,Rebalance顾名思义就是重新均衡消费者消费。Rebalance的过程如下: 第一