题目
给你一个长度为 n
的整数数组 nums
,返回使所有数组元素相等需要的最少移动数。
在一步操作中,你可以使数组中的一个元素加 1
或者减 1
。
示例
示例1:
输入:nums = [1,2,3]
输出:2
解释:
只需要两步操作(每步操作指南使一个元素加 1 或减 1):
[1,2,3] => [2,2,3] => [2,2,2]
示例2:
输入:nums = [1,10,2,9]
输出:16
思路
方法一:使所有数组元素相等的最少移动方法为最大值和最小值分别向中间值移动。因此,可以先将数组nums
排序,然后找出其中值,并计算每个值到中值需要的次数。
代码
方法一:
class Solution:
def minMoves2(self, nums: List[int]) -> int:
nums.sort()
mid, res = nums[len(nums) // 2], 0
for num in nums:
res += abs(mid - num)
return res
代码简化
class Solution:
def minMoves2(self, nums: List[int]) -> int:
nums.sort()
return sum(abs(num - nums[len(nums) // 2]) for num in nums)