给定一个未排序的数组,我试图找到与数组中值最近的K个元素。我很难在线性运行时间内找到解决方案。
A[] = 1, 2, 3, 4, 5 ,6 , 30 ,31, 32 ,33 ,34 # assume sorting part is done
中间值是6。
答案是2,3,4,5,6。
任何帮助或暗示都将不胜感激。
发布于 2017-11-13 10:01:36
我对此的建议是分两步进行。
首先,使用中间值算法在线性时间内求出未排序阵列的中值。
其次,扫描数组并填充(大小为k)的最大堆,其中元素按照与中位数的距离排列,以便找到k个最近的元素。
您可以确保堆以下列方式永远不包含超过k个元素。当您想要将(k+1)th元素添加到堆中时,可以检查它是否小于根元素。如果是这样,则将其添加到堆中,并在堆重组后移除(新的)根。如果没有,你可以放弃它。
上面的运行时应该是O(N log(k)),在N中是线性的。
https://stackoverflow.com/questions/47253561
相似问题