您的位置:首页 > 其它

O(n)时间内求无序数组中与中位数最近的k个数

2012-03-16 10:38 363 查看
昨天同学问到,于是立即帮忙想了一个方法。

问题是,给定一个无序的数组,找出与中位数最接近的k个数,要求O(n)的复杂度。

思路是这样的:

首先,我们需要知道利用线性时间选择可以在O(n)的时间内求出无序数组的中位数。

(1)O(n)求出无序数组中位数

(2)把数组里的所有数依次减去中位数并取绝对值,得到一个新的数组。这个数组的每个数表示其与中位数的距离的大小。复杂度O(n)。

(3)利用线性时间选择的方法,可以在O(n)时间求出第k个数,此时其左边的所有数都比k小,即可得到k个最小的数。

(4)k个最小的数所对应的原数就是与中位数最近的k个数。

至此完成要求。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐