假设您有一个长度为n的未排序数组。现在,您要从数组中提取k个最大的元素。我们也知道n比k大得多。
我幼稚的想法是对数组排序并输出k个最大的元素。那将花费O(nlog(n))。是否有一种更有效的算法可以利用n比k大得多的事实?
答案 0 :(得分:4)
是的,确实存在更有效的算法。
首先获取k个元素,然后构建包含这k个元素的 min -堆。
遍历其他元素。如果当前项目大于堆顶部,请移除顶部并插入当前项目。
最后一堆将包含k个最大元素。
复杂度为O(N*logK)
还考虑平均时间为O(n)的QuickSelect算法(最坏情况直到二次方)