【发布时间】:2014-11-17 20:55:19
【问题描述】:
我想知道我的思路是否正确。
我正在准备面试(作为一名大学生),我遇到的一个问题是在一个数组中找到 K 个最大的数字。
我的第一个想法是只使用部分选择排序(例如,从第一个元素开始扫描数组,并为看到的最低元素及其索引保留两个变量,并在数组末尾与该索引交换并继续这样做直到我们交换了 K 个元素并返回了该数组中前 K 个元素的副本)。
但是,这需要O(K*n) 时间。如果我简单地使用 Mergesort 之类的高效排序方法对数组进行排序,则只需 O(n*log(n)) 时间即可对整个数组进行排序并返回 K 个最大的数字。
在面试期间讨论这两种方法是否足够好(比较输入的 log(n) 和 K,并使用两者中较小的一个来计算最大的 K)或者假设我是否安全? m 期望给出这个问题的 O(n) 解?
【问题讨论】: