NO.453 最小操作次数使数组元素相等

题目

给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。

思路

本题要求,获取最小操作次数,即在满足所有元素均相等的情况下,操作次数最少。

由于本题无法确定最终元素均相等时,对于元素的大小,所以需要从题目中找规律。

我们可以假设:

最小移动次数为 count

设最终元素均相等时,数组的每一位数 为 fin

设数组的长度为 N

初始数组的总数为sum; 

初始数组中,最小的元素是 min 

我们可以得到的关系是:

count = \frac{fin * N - sum}{N-1}

这个公式的关键点,在于求出 fin 的关系

fin = min + (count)

带入上个公式得到:

count = \frac{(min + count)) * N - sum}{N-1}

化简得到:

count *(N-1)= (min + count) * N - sum

count * N - count = min * N + count * N - sum

count = sum - min * N

代码

public int minMoves(int[] nums) {
        Arrays.sort(nums);
        int min=nums[0];
        int sum=0;
        for(int i=0;i

你可能感兴趣的:(算法,数据结构)