首页 > 其他分享 >453. 最小操作次数使数组元素相等

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

时间:2023-11-16 10:22:32浏览次数:23  
标签:count 元素 nums min 453 次数 数组 操作

(453. 最小操作次数使数组元素相等 - 力扣(LeetCode))

https://leetcode.cn/problems/minimum-moves-to-equal-array-elements/description/

题目描述

给你一个长度为 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 整数

思路

逆向推理

这里难点是将n-1个数据全部加1,这样会导致时间大量浪费。
由于这里我们实际不关心绝对大小,只关心相对大小是否相等,
那么我们不如从反方面来思考,n-1个数据全部加1,相当于某一个数据-1
这样我们只要遍历一次数组,当所有数据都减为最小值时,循环结束。

当然这里不要真的一次次 nums[i]--; 弄个while循环直到nums[i] == min;每次count++
这里直接 count += nums[i]- min; 即可。
注意:n次减法的时间远远超过一次加法!

Code

  • 语言支持:C++

C++ Code:


class Solution {
public:
    int minMoves(vector<int>& nums) {
        int count = 0, min = *min_element(nums.begin(),nums.end());
        for (int num:nums){
            if (num > min) count += num- min;
        }
        return count;
    }
};

复杂度分析

令 n 为数组长度。

  • 时间复杂度:\(O(n)\)
  • 空间复杂度:\(O(n)\)

标签:count,元素,nums,min,453,次数,数组,操作
From: https://www.cnblogs.com/trmbh12/p/17835602.html

相关文章

  • 10--977. 有序数组的平方
    给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例1:输入:nums=[-4,-1,0,3,10]输出:[0,1,9,16,100]解释:平方后,数组变为[16,1,0,9,100]排序后,数组变为[0,1,9,16,100]示例2:输入:nums=[-7,-3,2,3,11]......
  • 统计字符串中每个单词出现的次数
    defcount_words(string):words=string.split()word_count={}forwordinwords:ifwordinword_count:word_count[word]+=1else:word_count[word]=1returnword_countstring="Iloveprogramming.Programmingisfun!"......
  • 统计字符串中每个单词出现的次数
    defcount_words(string):words=string.split()word_count={}forwordinwords:ifwordinword_count:word_count[word]+=1else:word_count[word]=1returnword_countstring="Iloveprogramming.Programmingisfun!"......
  • (十九)C#编程基础复习——交错数组
    C#中的交错数组其实就是元素为数组的数组,换句话说就是交错数组中的每个元素都可以是维度和大小不同的数组,所以有时交错数组也称为“数组的数组”。这一节比较复杂,用到的时候可以再深入挖掘,多敲代码练习总会出奇迹。一、声明交错数组交错数组声明语法:data_type[][]array_name;......
  • Java中for循环每次都通过list.size、str.length、length()获取数组或者字符串的长度是
    最近看到有同事在使用for循环的时候首先会将数组或者字符串的长度赋值给一个变量;在网上查了一下说是这样可以节约资源的消耗,真实的情况又是如何?让我们看下他们的源码来分析。1.将数组的长度赋值给变量lenList<Integer>list=newArrayList<Integer>();list.add(......
  • C语言如何一次给全部数组元素赋初值?
    在C语言中,可以在声明数组的同时一次性地为所有元素赋初值。下面是一个例子:c复制代码intarr[5]={1,2,3,4,5};在这个例子中,我们创建了一个包含5个整数的数组,并且一次性地为所有元素赋了初值。另外,需要注意的是,如果你在数组初始化后尝试更改数组中的元素值,那么该数组将不再是常......
  • 第10章 数组和指针
    1、例如:intarray[6]={1,2,3,4,5};,array[n],数组长度为5,n取值范围[0,n-1],就是1-5的地址;2、指针指代数组:#include<stdio.h>intmain(){/*带有5个元素的整型数组*/doublebalance[5]={1000.0,2.0,3.4,17.0,50.0};double*p;inti;......
  • Python将目录分割成数组
    Python将目录分割成数组要将目录路径分割成数组,你可以使用Python的`os`模块中的`os.path.split()`或`os.path.split()`函数,或者使用字符串的`split()`方法。以下是使用这两种方法的示例:使用`os.path.split()`函数:```pythonimportos#目录路径directory_path='......
  • 力扣-34-在排序数组中查找元素的第一个和最后一个位置
    一、题目力扣地址:https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/description/二、解法思路:也是二分查找相关题目,详细解法看注释fromtypingimportListclassSolution:"""leetcode:34二分查找类题目,与传统二分查......
  • 【C 语言基础】C风格数组初始化”={a};方式”的特性
    当进行数组初始化的时候,可以采用={一个元素的值}的方式,例如:intintarr[10]={1};intchararr[20]={'a'};使用这种方式初始化,可以将数组所有成员都初始化,没有随机值,保证了安全。其中,数组第一个值为指定元素的值,其余成员的值全为0。 测试代码:#include"iostream"usi......