462. 最少移动次数使数组元素相等 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)