内容
给定一个长度为 n 的非空整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。
示例:
输入:
[1,2,3]
输出:
3
解释:
只需要3次移动(注意每次移动会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
思路
这道题不能硬上,得分析规律。
123这个数组,按住3,将最小值变成最大值,得到343,移动了最大值减去最小值次,这个时候之前第二大的数成了最大的数,那么依然是按照之前的规律,移动最大数减去最小数次,也就是一次,得到最终结果,444。
所以这里的规矩就是,最小移动次数就是每个数与最小数差值之和。
代码
/**
这道题不能硬上,得分析规律。
123这个数组,按住3,将最小值变成最大值,得到343,移动了最大值减去最小值次,这个时候之前第二大的数成了最大的数,那么依然是按照之前的规律,移动最大数减去最小数次,也就是一次,得到最终结果,444。
所以这里的规矩就是,最小移动次数就是每个数与最小数差值之和。
* @param {number[]} nums
* @return {number}
*/
var minMoves = function (nums) {
var min = Math.min(...nums);
var sum = 0;
for (var i of nums) {
sum += i - min;
}
return sum;
};