我有一个面试问题,我似乎无法弄清楚。给定一个大小为 N 的数组,找到大小为 k 的子集,使得子集中的元素彼此相距最远。换句话说,最大化元素之间的最小成对距离。
Example:
Array = [1,2,6,10]
k = 3
answer = [1,6,10]
蛮力方法需要找到所有大小为 k 的子集,这在运行时是指数级的。
我的一个想法是从数组中均匀地获取值。我的意思是
- 取第一个和最后一个元素
- 找出它们之间的差异(在本例中为 10-1)并将其除以 k ((10-1)/3=3)
- 从两端向内移动 2 个指针,从您之前的选择中挑选出 +/- 3 的元素。所以在这种情况下,你从 1 和 10 开始,找到最接近 4 和 7 的元素。那就是 6。
这是基于元素应该尽可能均匀分布的直觉。我不知道如何证明它有效/无效。如果有人知道如何或有更好的算法,请分享。谢谢!