【发布时间】:2012-12-27 11:30:51
【问题描述】:
我有一个包含 n 个成对不同元素的数组和一个 1
现在我正在寻找一种算法来计算k 与数字数组中位数的绝对差最小的数字。 我需要线性复杂度 (O(n))。
我的方法:
我找到中位数:
- 我对数字进行排序
- 我得到了中间元素,或者如果元素的数量 id 甚至是中间和圆形中两个元素的平均值。
之后:
- 我获取每个数字并找到与中位数的绝对距离。这些结果我保存在不同的数组中
- 我对新得到的数组进行排序。
- 我取结果数组的前 k 个元素,我就完成了。
我不知道我的解决方案是否在O(n) 中,也不知道我的想法是否正确。有人可以验证吗?有人可以告诉我如何在 O(n) 中解决它吗?
【问题讨论】:
-
这是 StackOverflow 而不是代码工厂......当你遇到困难时我们会帮助你,但你必须开始......
-
不,你的排序破坏了 O(n)。
-
那不排序怎么解决?
-
如果你使用排序,那么你有
O(nlogn) -
我已经修正了你问题中的语法,希望你不要介意。