假设我有一个数组,其中包含n
整数。
如何找到尺寸的子集k
使得minimum
子集中所有整数对之间的距离为maximized
,我的意思是他们距离最远。
示例:数组a[]={1,2,6,7,10}
and k=3
,
subset = {1,6,10}
,最小距离为4
10 到 6 之间。
错误的子集 :
{1,7,10}
,最小距离为3
{1,2,6}
,最小距离为1
我想出了一个解决方案:
1)排序数组
2) 选择 a[0] ,现在找到 ceil(a[0]+x
) = Y 数组 ....然后 ceil(Y+x
) 等等k-1
次 ,第 k 个元素也将是a[n-1]
To find x
:
dp[i,j]
be the x
用于从前 i 个元素中选择 j 个元素。
最后我们想要dp[n][k]
这是x
但我在寻找方面遇到了问题x
.
dp[i,j] = max( min( dp[k,j-1], dp[i]-A[k] ) )
k=1 到 i-1 、 i=2 到 n 、 j=2 到 i
dp[i][1] = 0 在 i = 1 到 n 上
EDIT: 我想纠正一下动态规划解决方案,虽然我知道 x 可以通过对 x 进行二分查找来找到。
UPDATE 2:我已经更新了代码,但仍然没有得到正确的解决方案。请指出错误。
code : http://ideone.com/J5vvR9
UPDATE 3:感谢@Gassa、@Niklas B. 和@Fallen 的回答!