找出给定范围内数字的最小最小差异

时间:2016-01-31 01:19:04

标签: algorithm math numbers time-complexity

假设我有一个N个数字{A1,A2,...,An}的数组和2个数字P,Q

我必须在P和Q之间找到一个整数M,这样,min {| Ai-M |,1≤i≤N}最大化。

1< N< P≤Q≤10^ 6

用简单的话说:

对于每个数字,找到此数字与数组之间的最小绝对差值。 然后,在所有这些最小差异中,找到具有最高差异最大值的数字

我必须在O(NlogN)或更少的时候这样做。

我尝试了以下内容:

  • 对数组A(NlogN)

  • 进行排序
  • 迭代P和Q之间的所有数字,并且每个数字使用修改的二进制搜索找到最小差异并跟踪谁具有最大差异 - O((QP)logN)

我猜测有某种数学"技巧"比如使用平均值我错过了..

编辑(添加示例):

例如,如果你有数组 {5 8 14} 并且P = 4 Q = 9

答案是4,6,7或9。

让我们看看数字4-9

|4-5| = 1
|4-8| = 4
|4-14| = 10

因此4的最小差异为1

|5-5| = 0
|5-8| = 3
|5-14| = 9

因此4的最小差异是0

我们继续前进并找到所有数字的最小差异然后我们需要说明哪个数字(4/5/6/7/8/9)具有最高的最小差异(在此示例中为4,6,7和9有1个最小差异,即所有最小差异中的最大差异)

1 个答案:

答案 0 :(得分:1)

首先,您必须对数组进行排序。然后,您必须注意到您的解决方案是PQ或某个点x[i] = (A[i] + A[i+1]) // 2。基本上x [i]位于数组中连续元素之间的中间(如果此x [i]在P,Q之间)。

因为N非常小,所以它基本上在O(1)中运行。