LeetCode453最小操作数使得数组相等

139 阅读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 == nums.length
 1 <= nums.length <= 105
 -109 <= nums[i] <= 109
 答案保证符合 32-bit 整数

思考:

这个题意思是前n - 1个元素同时增加,直到所有元素相等,增加的次数就是所求的结果。

其实可以反过来想,与其说是n - 1个增加,1个不变,直到所有相等,还可以是n - 1 个不变,最大的-1。这两种情况所用的次数都是一样的。而每次减少的是1,直接把n - 1个数减去最小的数的和就是所求的结果!

实现:

 public int minMoves(int[] nums){
 ​
         int result = 0;
 ​
         Arrays.sort(nums);
 ​
         for (int i = 1; i < nums.length; i++) {
             result += nums[i] - nums[0];
         }
 ​
         return result;
 ​
 }

测试一下!

image.png

大佬的代码:

思想上一样,但是实现要快的多。

 ​
 class Solution {
     public int minMoves(int[] nums) {
         int minNum = Arrays.stream(nums).min().getAsInt();
         int res = 0;
         for (int num : nums) {
             res += num - minNum;
         }
         return res;
     }
 }

\