如何找到包含n个数字的一​​半的最小间隔?

时间:2018-02-13 17:18:50

标签: algorithm

如果我有n个数字,我如何找到包含这些数字的一半的最小间隔[a,b]?

3 个答案:

答案 0 :(得分:0)

排序数字
left索引设置为0,将right设置为n/2-1,得到差异A[right]-A[left]
在for循环中走n / 2步,递增两个索引,再次计算差值,记住最小的索引和相应的索引。

答案 1 :(得分:0)

越来越多地对数字进行排序并计算所有差异A[i+n/2] - A[i]。解决方案由最小化差异的指数给出。

<强>解释

不需要在包含少于n / 2个数字的区间(因为它们不满足条件)中搜索,也不需要在包含更多元素的区间中搜索(因为如果找到合适的区间,它就会赢得&t; t最小化,因为你可以删除极端元素。)

当元素被排序时,数组中的任何序列都以其第一个和最后一个元素为界。因此,对数字进行排序并滑动n / 2个元素的窗口就足够了。

现在判断这种O(n log n)方法是否最佳更具挑战性。

答案 2 :(得分:-1)

以下情况如何?

  • 按升序对给定的数字序列进行排序。
  • 从i开始循环,从第1到第([n / 2])个数字
  • 计算i +([n / 2])th和第i个数之间的差值d。将数字i,i + [n / 2]和d存储在可迭代的集合arr中。
  • 结束循环
  • 从数组arr中查找d的最小值。对应于此d的i和i + [n / 2]的值是您的最小范围。