453. 最小移动次数使数组元素相等

2018-06-08  本文已影响36人  吃饭用盘装

内容

给定一个长度为 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;
};

回到目录

上一篇下一篇

猜你喜欢

热点阅读