其他分享
首页 > 其他分享> > 最小操作数使数组元素相等

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

作者:互联网

题述

在这里插入图片描述

输入输出样例

在这里插入图片描述

解析

种理解:
法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;

    }
};




标签:操作数,相等,nums,int,sum,元素,ran,数组
来源: https://blog.csdn.net/qq_57968062/article/details/120870738