如何获得差异的最小绝对值?

时间:2014-11-17 11:37:32

标签: algorithm math

给定一个数组a[],并且每次对该数组的两个元素执行操作a[i]-x, a[j]+x (x <= a[i])。在这样的操作最多K次之后,为了确保max(abs (a[i] - a[j]))的值最小,并获得这个最小值?

我的解决方案: 每次,从该数组中选择两个数字,并确保它们的总和是恒定的。经过K次操作后, 我们可以得到数组中两个元素差异的最小绝对值。

但是,我不知道我的想法是否正确?如果没有,如何正确解决?

1 个答案:

答案 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保留所需结果后