一道题,最小操作次数使数组元素相等引发的思考

Posted Big sai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道题,最小操作次数使数组元素相等引发的思考相关的知识,希望对你有一定的参考价值。

前言

最近在打卡力扣刷题,一道简单题但是感觉挺好的。

力扣453:最小操作数使数组相等。

题目描述为:
给你一个长度为 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 整数

分析

拿到这题,题目告诉我们所有数字都只能增加,这里要求的是次数,每一次的效果是其他都增加1,其实也是其他相对不变自己减1,让所有数字相等,就是让所有数字都减到数组中的最小次数就行啦。

但是实现的时候可以先设一个比最小还小的数字(先计算到这么小数字的次数),然后顺序统计的途中标记最小的,最后再拿总次数减去这个次数就可以了。

实现代码

class Solution 
    public int minMoves(int[] nums) 
        if(nums.length==0)
            return 0;
        int min=nums[0];
        long va=0;
        int MIN=Integer.MIN_VALUE;
        for(int i=0;i<nums.length;i++)
            va+=nums[i]-MIN;
            if(nums[i]<min)
                min=nums[i];
        
        va-=(long) (min-MIN)*nums.length;
        return (int)va;
    

结语

这个题的做法技巧是 换位思考,别人都增加,其实你就是减少,我们要将复杂的加法问题转换成简单的减法问题。

还有好像也在暗示着什么,别人都在进步的时候,你原地不动就是在退步,你也很难超凡比别人强太多,想要不落下,就是要一步一个脚印,刷题打卡!

这是第三次组织csdn小伙伴一起力扣每日一题打卡,有需要的可以通过下面公号👇🏻👇🏻👇🏻关注加我,然后我拉你进每日一题力扣打卡一起学习交流!

以上是关于一道题,最小操作次数使数组元素相等引发的思考的主要内容,如果未能解决你的问题,请参考以下文章

一道题,最小操作次数使数组元素相等引发的思考

453. 最小移动次数使数组元素相等(数学)

算法千题案例⚡️每日LeetCode打卡⚡️——56.最小操作次数使数组元素相等

leetcode刷题39.最小操作次数使数组元素相等——Java版

LeetCode 453. 最小操作次数使数组元素相等 / 66. 加一 / 229. 求众数 II(摩尔投票法)

LeetCode#453 最小移动次数使数组元素相等