算法小知识------10.20----最小操作次数使数组元素相等

167 阅读1分钟

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

最小操作次数使数组元素相等

该题出自力扣的453题——最小操作次数使数组元素相等【简单题】,解法消化于官方题解

审题

原题:给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。

  • (×)方法一:

    • 对数组先排序
    • while循环,判断数组内元素是否一致
    • 对数组内 n - 1 的元素+1
    • 时间复杂度O(n的4次方),死于超时
  • (√)方法二:

    • n-1个元素+1;反之也就是最大的元素-1;
    • 很明显,相比于n-1元素+1,只对一个元素操作会有利
    • 取出数组最小元素,依次取元素相减的操作数相加,即为所需答案
    • 因为无需求出最后元素,所以只关注操作数即可

代码实现

        /**
     * 给你一个长度为 n 的整数数组,每次操作将会使 n - 1 个元素增加 1 。返回让数组所有元素相等的最小操作次数。
     * 输入:nums = [1,2,3]
     * 输出:3
     * 解释:
     * 只需要3次操作(注意每次操作会增加两个元素的值):
     * [1,2,3]  =>  [2,3,3]  =>  [3,4,3]  =>  [4,4,4]
     * @param nums
     * @return
     */
    public static int minMoves(int[] nums) {
        int minNum = Arrays.stream(nums).min().getAsInt();
        int res = 0;
        for (int num : nums) {
            res += num -  minNum;
        }
        return res;
    }

1634696529(1).jpg

总结

  • 时间复杂度:O(n),其中 n 为数组中的元素数量。我们需要一次遍历求出最小值,一次遍历计算操作次数。
  • 空间复杂度:O(1)。