一.题目描述
给定一个非空整数数组,找到使所有数组元素相等所需的最小移动数,其中每次移动可将选定的一个元素加1或减1。 您可以假设数组的长度最多为10000。
二.示例
三.算法分析
先对列表进行排序,防止得到不是最小的移动步数,然后根据列表长度分奇偶得到对应中位数,求得列表元素与中位数相减取绝对值求和则为最小移动步数。
四.算法实现
class Solution(object):
def minMoves2(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum = 0
nums.sort()
if len(nums) % 2 == 0:
median = (nums[len(nums)/2-1] + nums[len(nums)/2]) / 2
else:
median = nums[len(nums)/2]
for i in nums :
sum += abs(median - i)
return sum