【发布时间】:2013-04-21 10:50:05
【问题描述】:
当数组长度为 n 且 1
我认为您可以使用选择算法来找到第 m 个最小的整数(http://en.wikipedia.org/wiki/Selection_algorithm 中有一个复杂的称为 BFPRT 的整数,即 O(n)),然后将其用作对数组进行分区以获得前 m 个最小的整数。
但是,有没有办法使用诸如最小堆之类的数据结构来做到这一点?我怎么知道它是否是 O(n)?
【问题讨论】:
-
在我看来,答案嵌入在您的问题中 - 根据维基百科,最小最大堆可以在 O(n) 时间内构建。一旦你有了它,得到 m 个最小的元素应该是非常简单的。
-
查看pythons heapq nsmallest,docs.python.org/2/library/heapq.html