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

x33g5p2x  于2021-12-30 转载在 其他  
字(0.9k)|赞(0)|评价(0)|浏览(272)

前言

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

力扣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小伙伴一起力扣每日一题打卡,有需要的可以通过下面公号👇🏻👇🏻👇🏻关注加我,然后我拉你进每日一题力扣打卡一起学习交流!

相关文章