【发布时间】: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 我编辑并添加了示例。
标签: algorithm math numbers time-complexity