algorithm - 给定一个数字流,你将如何跟踪第 1,000,000 个最大的数字?

标签 algorithm

给定一个数字流,您将如何跟踪第 1,000,000 个最大的数字?

我在面试中被问到这个问题。

最佳答案

一种方法是保留 minimum heap ,并将堆的大小限制为 1,000,000。虽然堆还没有达到 1,000,000 个项目,但我们会将流中的每个新项目添加到我们的堆中。当堆变满时,我们会将流中的每个新项目与堆中的最小值进行比较,如果它大于最小值,我们将弹出最小值并插入新项目。这样,堆的最小项始终是第 1,000,000 个最大值。

伪代码示例:

Handle_Stream_Item(item):
  if(MinHeap.size < 1000000):
    MinHeap.insert(item)
  else if (item > MinHeap.min()):
    MinHeap.extractMin()
    MinHeap.insert(item)

关于algorithm - 给定一个数字流,你将如何跟踪第 1,000,000 个最大的数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15884568/

相关文章:

image - 是否有一种算法可以确定是否可以在屏幕上显示一个或两个图像? (单页与双页)

Java匹配两个字符串之间的每两个序列字符

c++ - [leetcode 5]我无法找到最长回文子串问题的解决方案中的问题

algorithm - 连接两类对象,使总连接距离最小

algorithm - 在经过排序的整数数组中搜索,该数组会滚动

algorithm - 仅使用超过阈值的指定面额硬币可以获得的最小货币量

c++ - 在二叉搜索树中查找最常用的词

c# - 1到100亿之间有多少个数字包含14

java - 最大数量的连续奇数等于一个目标

java - O(n!)的示例?