462. 最少移动次数使数组元素相等 II
https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements-ii/
解法一:
求最小的moves,但并没有求最终移动到哪个数上,因为最小moves可能对应多个最终的数.假设一对数a,b( a < b )最终要移动到c , 则a,b最小的总moves为:
即当( a < c < b )时, a,b的总moves是一个常量,与c无关.(画数轴图便知)
先将所有数排序.设共有n个数.
若n为奇,则数组中的中位数只有一个,记为c,由中位数的性质,
a1 <= a2 <= ... <= an <= c <= bn <= ... <= b2 <= b1
. (ai,bi分别是中位数c左右两侧的数,且一一对应).由上面的结论可知,最终移到中位数c,总moves最小(c不用移动).若n为偶,有两个中位数c1, c2,即
a1 <= a2 <= ... <= an <= c1 <= c2 <= bn <= ... <= b2 <= b1
为了使总moves最小,最终的数c必然在两个中位数c1,c2之间.取这个区间内任意的整数即可,总moves最小.以上两种情况,总moves都为
(b1-a1) + (b2-a2) + ... + (bn-an)
最后更新于