453. Minimum Moves to Equal Array Elements

纯数学问题,没想出来

由题目可以得到两个等式
n为nums的数组长度,m为答案,x为最后全相等时的值

sum(nums)+m(n-1)=xn
min(nums)+m=x

第一个等式很显然,第二个等式没有那么明了
可以这么理解,如果每次都加n-1,那么除了最大的那个数,其他数都需要加,对于最小的数,每次增加都有它的份,所以可得。

推倒可得

m=sum-min*n

C++

class Solution {
public:
    int minMoves(vector<int>& nums) {
        int total=0;
        sort(nums.begin(),nums.end());
        for(int i=0;i<nums.size();i++)
        {
            total+=nums[i];
        }
        int result=total-nums[0]*nums.size();
        return result;
    }
};

Java

public class Solution {
    public int minMoves(int[] nums) {
        int total=0;
        Arrays.sort(nums);
        for(int i=0;i<nums.length;i++)
        {
            total+=nums[i];
        }
        int result=total-nums[0]*nums.length;
        return result;
    }
}

Javascript

/**
 * @param {number[]} nums
 * @return {number}
 */
var minMoves = function(nums) {
    var total=0;
    nums.sort(function(a,b){return a-b;});
    for(var i=0;i<nums.length;i++)
    {
        total+=nums[i];
    }
    var result=total-nums[0]*nums.length;
    return result;
};

总结一下

C++ vector sort

sort(nums.begin(),nums.end());

Java sort

Arrays.sort(nums);

Javascript sort

nums.sort(function(a,b){return a-b;});

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容