找到最接近数组中所有数字的数字

时间:2013-02-26 13:23:34

标签: arrays algorithm optimization numbers

这个问题基本上是一个算法优化问题。

我们有一个包含n个元素的列表。例如{n1,n2,n3...nk} 这个列表是排序的,我们必须找出数字ni

  1. n1<=ni<=nk
  2. ni与每个数字的距离之和最小。
  3. 可能有(nk-n1+1)个可能的数字,但我们的目标是找出ni的数字n1 最接近所有其他数字。

    蛮力逼近可以通过O(n^2)迭代到nk并计算距离之和 从所有列表号码。通过这种方式,我们可以很容易地找出最接近列表中所有其他数字的数字。

    但这种方法存在的问题是,它在时间复杂度方面并不好。这种方法的时间复杂度为{{1}}。

    我认为有更好的方法可以用更少的时间来解决这个问题 复杂。

    任何方法都将受到赞赏。

3 个答案:

答案 0 :(得分:6)

如果“距离”是指distance(a,b) = abs(a-b),那么您只需找到中位数。

在排序列表中查找中位数是O(1)。

答案 1 :(得分:1)

答案应该是ROUND(SUM(n1,...,nk)/ k)。

答案 2 :(得分:0)

找到平均值...这需要O(n)。 然后浏览列表找到ni的平均值(也需要O(n))...实际上更像是o(1 / 2n)