LeetCode 0453.最小操作次数使数组元素相等:两次遍历(反向思维)

【LetMeFly】453.最小操作次数使数组元素相等:两次遍历(反向思维)

力扣题目链接:https://leetcode.cn/problems/minimum-moves-to-equal-array-elements/

给你一个长度为 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 n-1 n−1个数 + 1 +1 +1,等价于每次操作会使得 1 1 1个数 − 1 -1 −1。

首先遍历一遍数组得到最小元素,再遍历一遍数组将每个元素与最小元素的差值累加即为答案。

  • 时间复杂度 O ( n ) O(n) O(n)
  • 空间复杂度 O ( 1 ) O(1) O(1)

AC代码

C++
cpp 复制代码
/*
 * @LastEditTime: 2026-11-01 10:58:17
 */
class Solution {
public:
    int minMoves(vector<int>& nums) {
        int m = nums[0];
        for (int t : nums) {
            m = min(m, t);
        }
        int ans = 0;
        for (int t : nums) {
            ans += t - m;
        }
        return ans;
    }
};
Python
python 复制代码
'''
LastEditTime: 2026-11-01 11:00:17
'''
from typing import List

class Solution:
    def minMoves(self, nums: List[int]) -> int:
        m = min(nums)
        return sum(t - m for t in nums)
Java
java 复制代码
/*
 * @LastEditTime: 2026-11-01 11:01:07
 */
class Solution {
    public int minMoves(int[] nums) {
        int m = nums[0];
        for (int t : nums) {
            m = Math.min(m, t);
        }
        int ans = 0;
        for (int t : nums) {
            ans += t - m;
        }
        return ans;
    }
}
Go
go 复制代码
/*
 * @LastEditTime: 2026-11-01 10:59:44
 */
package main

func minMoves(nums []int) (ans int) {
    m := nums[0]
    for _, t := range nums {
        m = min(t, m)
    }
    for _, t := range nums {
        ans += t - m
    }
    return
}
Rust
rust 复制代码
/*
 * @LastEditTime: 2026-11-01 11:01:46
 */
impl Solution {
    pub fn min_moves(nums: Vec<i32>) -> i32 {
        let mut m = nums[0];
        for &t in nums.iter() {
            m = m.min(t);
        }
        let mut ans = 0;
        for &t in nums.iter() {
            ans += t - m;
        }
        ans
    }
}

End

同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

千篇源码题解已开源

相关推荐
孤独的Bochi2 小时前
# [CSP-S 2026] 迁徙 / migrate 题解
题解
君万2 小时前
【LeetCode每日一题】回溯:46. 全排列 78. 子集 39. 组合总和
算法·leetcode·go
Keep_Trying_Go3 小时前
Consistent-Point半监督人群计数算法详解
人工智能·深度学习·算法·计算机视觉·人群计数
在所不辞兄3 小时前
【零基础学智能仿真-69】综合项目——材料参数驱动的仿真研究
人工智能·深度学习·神经网络·算法·机器学习·1024程序员节
Tisfy4 小时前
LeetCode 3665.统计镜子反射路径数目:三个动态规划数组
leetcode·动态规划·代理模式·题解
怕浪猫4 小时前
Super-agent 在各大模型厂商的应用情况
算法·面试·github
海绵宝宝转agent5 小时前
LeetCode100 二叉树个人题解
算法·leetcode·深度优先
octopus_c5 小时前
C++ 模板详解:函数模板、类模板、特化与分离编译
开发语言·c++·算法
東隅已逝,桑榆非晚5 小时前
算法1. 双指针法-移动零
c++·算法