我刚刚接受了一个问题的采访,我很好奇答案应该是什么。问题本质上是:
假设您有一个未排序的 n 个整数列表。您如何找到此列表中的 k 个最小值?也就是说,如果你有一个 [10, 11, 24, 12, 13] 的列表并且正在寻找 2 个最小值,你会得到 [10, 11]。
我有一个 O(n*log(k)) 解决方案,这是我最好的,但我很好奇其他人想出了什么。我将通过发布我的解决方案来避免污染人们的大脑,并将在稍后对其进行编辑。
编辑#1:例如,类似的函数:list getMinVals(list &l, int k)
编辑#2:它看起来像是一个选择算法,所以我也会加入我的解决方案;遍历列表,并使用优先级队列来保存最小值。优先级队列的规范是最大值将在优先级队列的顶部结束,因此在将顶部与元素进行比较时,顶部将被弹出,较小的元素将被推送。这假设优先级队列有一个 O(log n) 推送和一个 O(1) 弹出。