找到给定范围内数字的最大最小差
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】:首先你必须对一个数组进行排序。然后您必须注意到您的解决方案是P
或Q
或某个点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(除法是指整数除法,如果不清楚,请见谅)。 谢谢!为了提高自己,你能告诉我你是怎么解决的吗?是什么让你有这样的想法?以上是关于找到给定范围内数字的最大最小差的主要内容,如果未能解决你的问题,请参考以下文章