最简单的解决方案是维持最大大小为5000
的最小堆。
- 每次有新数字到达时-检查堆是否小于5000(如果是)-添加它。
- 如果不是,请检查最小值是否小于新元素,如果是,则将其弹出并插入新元素。
- 完成后,您将拥有一个包含5000个最大元素的堆。
此解决方案很
O(nlogk)复杂,其中
n是元素数,并且
k是您需要的元素数(在您的情况下为5000)。
也可以
O(n)使用选择算法来完成-
存储所有元素,然后找到第5001个最大元素,并返回所有大于该元素的元素。但是,这很难实现,并且对于合理的大小输入-
可能不会更好。另外,如果流包含重复项,则需要更多处理。



