🍀最小操作次数使得数组相等
描述:
# 给你一个长度为 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;
}
测试一下!
大佬的代码:
思想上一样,但是实现要快的多。
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;
}
}
\