![b7cf116b46458215654ad4a0de3a5551.png](https://img-blog.csdnimg.cn/img_convert/b7cf116b46458215654ad4a0de3a5551.png)
题目链接: https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements
难度:简单
通过率:52.2%
题目描述:
给定一个长度为 n 的 非空 整数数组,找到让数组所有元素相等的最小移动次数。每次移动可以使 n - 1 个元素增加 1。
示例:
**输入:**
[1,2,3]
**输出:**
3
**解释:**
只需要3次移动(注意每次移动会增加两个元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
思路:
数学题
假设目前数组总和为sum
,我们需要移动次数为m
,那么整体数组总和将会增加m * (n - 1)
,这里的n
为数组长度,最后数组所有元素都相等为x
,于是有:
sum + m * (n - 1) = x * n
(1)
我们再设数组最小的元素为min_val
,m = x - min_val
,即 x = m + min_val
带入(1)得:
m = sum - min_val * n
代码:
class Solution:
def minMoves(self, nums: List[int]) -> int:
return sum(nums) - len(nums) * min(nums)