找到一个数字,表示数组中绝对差值的最小和

时间:2016-03-13 18:18:52

标签: algorithm math computer-science

例如array a[]= {1,1,10},我们需要找到' x'这样|x-1|+|x-1|+|x-10|是最小的。
这里,x是1.

可以用贪婪的方法解决,比如取平均值还是别的什么?
注意:取平均值不起作用,为什么

我只能提出O(nlogn)解决方案(二进制搜索),有没有像dp这样的其他方法?

提前致谢!

1 个答案:

答案 0 :(得分:4)

这是一个非常简单的问题(不要觉得被冒犯:至少,如果你知道,答案很简单):

如果您有奇数个项目,那么中间的项目将是您的最佳选择。

如果您有偶数,则中间两个之间的任何数字都将同样最佳。

因此不需要进行数值计算,只需排序:)

说明:移动结果数字会将每个abs(x-x1)改变相同的数量,但会有不同的符号:有些增加,有些减少。

从中心点(在奇数情况下),当向任一方向移动时,将再增加一个abs;当在两个中心点之间移动时(在偶数情况下),每个符号将有abs个。{/ p>