LeetCode 453. Minimum Moves to Equal Array Elements

Posted A-Little-Nut

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 453. Minimum Moves to Equal Array Elements相关的知识,希望对你有一定的参考价值。

Given a non-empty integer array of size n, find the minimum number of moves required to make all array elements equal, where a move is incrementing n – 1 elements by 1.

Example:

Input:
[1,2,3]

Output:
3

Explanation:
Only three moves are needed (remember each move increments two elements):

[1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]
class Solution {
public:
    int minMoves(vector<int>& nums) {
        int minval=*min_element(nums.begin(),nums.end());
        int sum=accumulate(nums.begin(),nums.end(),0);
        return sum-nums.size()*minval;
        //分析如下:
          首先题目的意思是每次move,相当于选nums里nums.size()-1个数加1,然后不停的执行move,直到nums里的数都相等;
          先来分析一下,不管每次怎么move,被选中要加一的数里一定含有最小的那个数,如若不然,就是加1的数里没有最小的那个,其他的数本来就比它大了,加1后就更           大了,要求是最少的move次数,所以必须每次move中要加1的数里含有最小的那个数。
          设最后每个数都是m。 一开始nums中最小的数是minval, nums的和是sum。cnt是move的次数
          每次move,相当于sum加nums.size()-1。
          于是最后根据每个数相等 有方程:
              nums.size()*m=sum+cnt*(nums.size()-1),  
          又每次move加1里都有minval,所以move的次数cnt=m-minval.
          可以解出 cnt=sum-nums.size()*minval;
        
    }
};

以上是关于LeetCode 453. Minimum Moves to Equal Array Elements的主要内容,如果未能解决你的问题,请参考以下文章

453. Minimum Moves to Equal Array Elements(LeetCode)

[leetcode-453-Minimum Moves to Equal Array Elements]

LeetCode 453. Minimum Moves to Equal Array Elements

[LeetCode&Python] Problem 453. Minimum Moves to Equal Array Elements

LeetCode 453. Minimum Moves to Equal Array Elements C#

(Java) LeetCode 453. Minimum Moves to Equal Array Elements —— 最小移动次数使数组元素相等