美文网首页
453. 最小移动次数使数组元素相等

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

作者: 吃饭用盘装 | 来源:发表于2018-06-08 21:29 被阅读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;
    };
    

    回到目录

    相关文章

      网友评论

          本文标题:453. 最小移动次数使数组元素相等

          本文链接:https://www.haomeiwen.com/subject/ixkzsftx.html