给定一个数组a[]
,并且每次对该数组的两个元素执行操作a[i]-x, a[j]+x (x <= a[i])
。在这样的操作最多K
次之后,为了确保max(abs (a[i] - a[j]))
的值最小,并获得这个最小值?
我的解决方案: 每次,从该数组中选择两个数字,并确保它们的总和是恒定的。经过K次操作后, 我们可以得到数组中两个元素差异的最小绝对值。
但是,我不知道我的想法是否正确?如果没有,如何正确解决?
答案 0 :(得分:0)
如果我正确理解您的算法/问题,则无需在执行[i] -x,[j] + x操作期间进行任何计算。
所以我的建议是:
1)制作所需数量的a [i] -x,a [j] + x运算
2)执行以下程序(伪代码):
_aSorted[] = sort(_a[])
_dif = max integer value
for (i=0; i < _a[].length - 1; i++){
if(abs(_aSorted[i]-_aSorted[i+1]) < _dif)
_dif = abs(_aSorted[i] -_aSorted[i+1]);
}
因此,在此程序_dif
保留所需结果后