【问题标题】:Get the k-largest elements from an array whit n Elements, where n is much larger than k从具有 n 个元素的数组中获取 k 个最大的元素,其中 n 远大于 k
【发布时间】:2018-11-09 18:13:23
【问题描述】:

假设你有一个长度为 n 的未排序数组。现在你想从数组中取出 k 最大的元素。我们也知道n远大于k。

我的幼稚想法是对数组进行排序并输出 k 最大的元素。那将花费 O(nlog(n))。有没有更有效的算法可以利用 n 远大于 k 的事实?

【问题讨论】:

标签: algorithm time-complexity


【解决方案1】:

是的,确实存在更有效的算法。

获取k个第一个元素,构建包含这k个元素的min-heap。

遍历其他元素。如果当前项大于堆顶,则删除顶部并插入当前项。

结束堆之后会包含k​​个最大的元素。

复杂度为O(N*logK)


还要考虑平均时间为 O(n) 的 QuickSelect 算法(虽然它的最坏情况是二次的)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 2013-01-15
    • 2013-01-12
    • 2012-08-16
    相关资源
    最近更新 更多