小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
题目
给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。
示例
输入:nums = [1,2,3]
输出:3
解释:
只需要3次操作(注意每次操作会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
输入: nums = [1,1,1]
输出: 0
提示
- n == nums.length
- 1 <= nums.length <=
- - <= nums[i] <=
- 答案保证符合
32-bit整数
解题思路
根据题目我们可以得知,每次操作都会有n - 1个元素自增1,相当于整体拉近了与最大值之间的距离。反过来想,我们也可以将最大值自减1,来缩短两者之间的差距。要计算使得数组中所有元素相等的操作数,那么我们需要将所有大于最小值的元素进行自减,累加结果,以此得出总操作数。
代码实现
class Solution {
public int minMoves(int[] nums) {
int min = nums[0];
for(int num : nums){
min = Math.min(min, num);
}
int sum = 0;
for(int num : nums){
sum += num - min;
}
return sum;
}
}
复杂度分析
- 时间复杂度:
- 空间复杂度:
最后
文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!
如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!