找到数组中绝对差的最小总和的数字
find a number for minimum sum of absolute difference in an array
例如array a[]= {1,1,10}
,我们需要找到'x'使得|x-1|+|x-1|+|x-10|
最小。
此处,x 为 1。
可以用贪婪的方法解决吗,比如取平均值或其他什么?
注意:取平均值不起作用,为什么?
我只能想出O(nlogn)
的解决方案(二分查找),有没有其他类似dp的办法?
提前致谢!
这是一个非常简单的问题(不要觉得被冒犯:至少,如果你知道的话,答案很简单):
如果您的项目数量为奇数,那么中间的项目将是您的最佳选择。
如果您有一个偶数,则中间两个之间的任何数字都同样是最优的。
所以不需要数值计算,只需要排序:)
说明:移动你得到的数字将改变每个 abs(x-x1)
相同的数量,但符号不同:一些增加,一些减少。
从中心点(在奇数情况下)向任一方向移动都会增加一个 abs
;而当在两个中心点之间移动时(在偶数情况下),每个符号的 abs
数量相同。
例如array a[]= {1,1,10}
,我们需要找到'x'使得|x-1|+|x-1|+|x-10|
最小。
此处,x 为 1。
可以用贪婪的方法解决吗,比如取平均值或其他什么?
注意:取平均值不起作用,为什么?
我只能想出O(nlogn)
的解决方案(二分查找),有没有其他类似dp的办法?
提前致谢!
这是一个非常简单的问题(不要觉得被冒犯:至少,如果你知道的话,答案很简单):
如果您的项目数量为奇数,那么中间的项目将是您的最佳选择。
如果您有一个偶数,则中间两个之间的任何数字都同样是最优的。
所以不需要数值计算,只需要排序:)
说明:移动你得到的数字将改变每个 abs(x-x1)
相同的数量,但符号不同:一些增加,一些减少。
从中心点(在奇数情况下)向任一方向移动都会增加一个 abs
;而当在两个中心点之间移动时(在偶数情况下),每个符号的 abs
数量相同。