最小操作数使数组元素相等

题述

最小操作数使数组元素相等

输入输出样例

最小操作数使数组元素相等

解析

种理解:
法1、如果我们只是希望让所有元素相等;只看相对差距的话,那选出n-1个增加1和剩下那个减少1有什么区别?所以计算每一个数组内的元素到最小数的差值就好;
法2、题干中说每次操作都会使n - 1个元素加1,那么我假设目前数组的总和为sum,最少需要移动的次数为m,所以说整体数组的总和最终会增加
m * (n - 1)
。最终所有元素都相等,这里我设为x。那么,sum + m * (n - 1) = x * n。所以联立这两个方程就可以得出
m = sum - min * n。

代码

class Solution {
public:
    int minMoves(vector<int>& nums) {
        sort(nums.begin(),nums.end());
        int n=nums.size();
        int ran=0;
        for(int i=n-1;i>0;i--){
            if(nums[i]!=nums[0]){
                ran+=nums[i]-nums[0];
            }
        }
        return ran;

    }
};




上一篇:编程入门笔记1


下一篇:[LeetCode 278,283][简单]第一个错误的版本/移动零