LeetCode——453. 最小操作次数使数组元素相等(Java)

题目描述

给你一个长度为 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-1个元素加1

但是如果我们采用逆向思维,使n-1个元素减1使得所有的元素都等于最小值即可

正确代码

    public int minMoves(int[] nums) {
        int min = Arrays.stream(nums).min().getAsInt(), ans = 0;

        for (int num : nums) {
            ans += num - min;
        }

        return ans;
    }

总结

逆向思维往往可以简化问题,如果循规蹈矩像我一开始一样,就会出现很多奇怪的想法

比如说求和每次除以数组长度,能整除就可以,但是这是错误的思想,要不就dp,总是都是很麻烦

如果文章存在问题或者有更好的题解,欢迎在评论区斧正和评论,各自努力,你我最高处见
posted @ 2021-10-20 09:27  21岁还不是架构师  阅读(64)  评论(0编辑  收藏  举报