当前位置:   article > 正文

LeetCode453. 最小操作次数使数组元素相等(数学:n-1个加相当于1个减)_给n个数字,每次操作可以使n个数字中的任意一个+1或-1,最终使n个数字变得相同,求操

给n个数字,每次操作可以使n个数字中的任意一个+1或-1,最终使n个数字变得相同,求操
  1. 最小操作次数使数组元素相等
    给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。

示例 1:

输入:nums = [1,2,3]
输出:3
解释:
只需要3次操作(注意每次操作会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
示例 2:

输入:nums = [1,1,1]
输出:0

法一:题解的做法。
每次都n-1个数+1,就相当于是有1个数减1.最后减到所有数都等于数组中的最小值即可。然后就计算每个数减到数组中最小值需要多少次,并进行累加即可。

class Solution {
    public int minMoves(int[] nums) {
        int min =nums[0];
        for(int i: nums){
            if(i<min){
                min=i;
            }
        }
        int ans =0;
        for(int i : nums){
            ans += i-min;
        }
        return ans ;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

法二:宫水三叶做法。
她真的好牛啊啊啊啊,太厉害了。进行了数学推导的。太强了
宫水三叶题解

class Solution {
    public int minMoves(int[] nums) {
        int n = nums.length;
        long min = nums[0], sum = 0;
        for (int i : nums) {
            min = Math.min(min, i);
            sum += i;
        }
        return (int)(sum - min * n);
    }
}

作者:AC_OIer
链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements/solution/gong-shui-san-xie-noxiang-xin-ke-xue-xi-tt3zu/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/390633
推荐阅读