从未排序数组

时间:2017-11-12 20:24:45

标签: algorithm sorting

给定一个未排序的数组,我试图找到最接近数组中值的K个元素。我在线性运行时找不到解决方案。

A[] = 1, 2, 3, 4, 5 ,6 , 30 ,31, 32 ,33 ,34    # assume sorting part is done

这里的中位数是6。

对此的回答是2,3,4,5,6。

任何帮助或提示都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

我对此的建议是两步法。

首先,使用Median of Medians算法在线性时间内查找未排序数组的中位数。

其次,扫描数组并填充Max Heap(大小为k),其中元素根据与中位数的距离进行组织,以便找到k个最近的元素。

确保堆永远不会以下列方式包含多于k个元素。如果要将第(k + 1)个元素添加到堆中,请检查它是否小于根。如果是这样,您将它添加到堆中,并在重新组织堆后删除(新)根。如果没有,你可以丢弃它。

以上应该具有O(N log(k))的运行时间,其在N中是线性的。