给定一个未排序的数组A [1 .... N],试图找到A中的K数,其值接近A的中位数。我可以在线性时间O(N)中找到A的中位数。我还能在线性时间内找到K吗?例如。 A = [9,2,7,3,8,1,12},中位数(A)= 7,关闭值为7的3项为{7,8,9}。
答案 0 :(得分:2)
我想你想要一个selection algorithm,例如Introselect。如果您恰好使用c ++实现,则可以使用非常有用的std::nth_element
它将重新排列一系列元素,使得给定点之前的所有元素都小于后面的元素。这样做两次,你就得到了一组最接近平均值的K元素。