0453. 最小操作次数使数组元素相等
大约 2 分钟
---
0453. 最小操作次数使数组元素相等
- 标签:数组、数学
- 难度:中等
题目链接
题目大意
描述:
给定一个长度为 的整数数组,每次操作将会使 个元素增加 。
要求:
返回让数组所有元素相等的最小操作次数。
说明:
- 。
- 。
- 。
- 答案保证符合 32-bit 整数。
示例:
- 示例 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解题思路
思路 1:数学转化
这道题要求每次操作使 个元素增加 ,最终使所有元素相等。
我们可以从另一个角度思考:每次操作使 个元素增加 ,等价于每次操作使 个元素减少 。
假设最终所有元素都变成 ,且最小值为 ,那么操作次数为:。
为了使操作次数最小,我们应该让所有元素都变成数组的最小值 ,这样操作次数为:
算法思路:
- 找到数组的最小值 。
- 遍历数组,计算所有元素与最小值的差值之和,即为最小操作次数。
思路 1:代码
class Solution:
def minMoves(self, nums: List[int]) -> int:
# 找到数组中的最小值
min_val = min(nums)
# 计算所有元素与最小值的差值之和
moves = 0
for num in nums:
moves += num - min_val
return moves思路 1:复杂度分析
- 时间复杂度:,其中 为数组长度。需要遍历两次数组,一次找最小值,一次计算差值之和。
- 空间复杂度:。只使用了常数额外空间。