找到给定范围内数字的最大最小差

Posted

技术标签:

【中文标题】找到给定范围内数字的最大最小差【英文标题】:Find the highest minimum difference of a number from a given range 【发布时间】:2016-01-31 01:19:03 【问题描述】:

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

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

1

简单来说:

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

我必须在 O(NlogN) 或更短的时间内完成此操作。

我尝试了以下方法:

对数组 A (NlogN) 排序

遍历 P 和 Q 之间的所有数字,并为每个数字使用修改后的二进制搜索找到最小差异,并跟踪谁的差异最大 - O((Q-P)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 个最小差异,在所有最小差异中最大)

【问题讨论】:

你参加什么比赛? @SalvadorDali 这不是竞赛题...这是来自hackerrank.com 的问题(练习编程问题) 能否提供一个问题的链接? @SalvadorDali hackerrank.com/challenges/sherlock-and-minimax 但我认为您必须注册才能看到网站中的问题。 @userunknown 我编辑并添加了示例。 【参考方案1】:

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

因为N真的很小,所以基本上会在O(1)内运行。

【讨论】:

为什么解是 x_i = (A_i + A_j) / 2 ?你能详细说明一下吗? 请至少花 30 分钟来解决这个问题(我已经给了你完整的解决方案,可以转换为 对于数组 1,6,13 和 P=2 Q=11 你的答案是什么?答案应该是 9 或 10,但不是 P、Q 或连续元素之间的任何中间 9(除法是指整数除法,如果不清楚,请见谅)。 谢谢!为了提高自己,你能告诉我你是怎么解决的吗?是什么让你有这样的想法?

以上是关于找到给定范围内数字的最大最小差的主要内容,如果未能解决你的问题,请参考以下文章

如何在向量的给定索引范围内找到最小元素?

如何缩小具有已知最小值和最大值的数字范围

如何找到给定范围内除以给定数字时具有一定余数的值的数量?

随机数生成器不会使用输入字段中的值生成给定范围内的预期数字[重复]

如何在给定范围内找到数组中的最小值?

用于在多张纸上循环的范围内查找最大值和最小值的 VBA 代码