【发布时间】:2011-05-04 22:54:23
【问题描述】:
假设你有一个包含 n 个项目的数组 A,并且你想找到 A 中最接近的 k 个项目 到 A 的中位数。例如,如果 A 包含 9 个值 {7, 14, 10, 12, 2, 11, 29, 3, 4} 和 k = 5,那么答案将是值 {7, 14, 10, 12, 11},因为中位数 是 10,这些是 A 中最接近值 10 的五个值。给出一个算法 在 O(n) 时间内解决这个问题。
我知道选择算法(深度选择)是解决这个问题的合适算法,但我认为它会在 O(n*logn) 时间而不是 O(n) 时间内运行。任何帮助将不胜感激:)
【问题讨论】:
-
IMO 你必须对列表进行排序,而且总是大于 O(n)。
-
您的问题相当于能够在 O(n) 时间内找到任意百分位数。在 O(n) 时间内找到 just 中位数(即解决 k = 1 的问题)是可能的,但并非易事。该算法可能可以扩展到找到百分位数。你为什么需要这个?是作业吗?