力扣刷题笔记 → 453. 最小操作次数使数组元素相等

402 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

题目

给你一个长度为 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 <= 10510^5
  • -10910^9 <= nums[i] <= 10910^9
  • 答案保证符合 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;
    }
}

复杂度分析

  • 时间复杂度:O(N)O(N)
  • 空间复杂度:O(1)O(1)

最后

文章有写的不好的地方,请大佬们不吝赐教,错误是最能让人成长的,愿我与大佬间的距离逐渐缩短!

如果觉得文章对你有帮助,请 点赞、收藏、关注、评论 一键四连支持,你的支持就是我创作最大的动力!!!

题目出处: leetcode-cn.com/problems/mi…