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