- 最少移动次数使数组元素相等 II
给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。
例如:
输入:
[1,2,3]
输出:
2
说明:
只有两个动作是必要的(记得每一步仅可使其中一个元素加1或减1):
[1,2,3] => [2,2,3] => [2,2,2]
思路:
这是一个经典的数学问题,当 x 为这个 N 个数的中位数时,可以使得距离最小。具体地,若 N 为奇数,则 x 必须为这 N 个数中的唯一中位数;若 N 为偶数,中间的两个数为 p 和 q,中位数为 (p + q) / 2,此时 x 只要是区间 [p, q] 中的任意一个数即可。
因此,我们只需要找到这个 N 个数的中位数,并计算距离之和。我们可以直接将数组进行排序,这样就直接得到了中位数。
作者:LeetCode
链接:https://leetcode-cn.com/problems/minimum-moves-to-equal-array-elements-ii/solution/zui-shao-yi-dong-ci-shu-shi-shu-zu-yuan-su-xiang-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
class Solution:
def minMoves2(self, nums: List[int]) -> int:
nums.sort()
len2 = len(nums)
index = 0
t = 0
index = int(len2 / 2)
t = nums[index]
res = 0
for i in nums:
res += abs(i-t)
return res