462.最少移動次數使數組元素相等 II
給定一個非空整數數組,找到使所有數組元素相等所需的最小移動數,其中每次移動可將選定的一個元素加1或減1。 您可以假設數組的長度最多爲10000。
例如:
輸入:
[1,2,3]
輸出:
2
說明:
只有兩個動作是必要的(記得每一步僅可使其中一個元素加1或減1):
[1,2,3] => [2,2,3] => [2,2,2]
解法一:
首先想到的是找出數組中的平均數或者距離平均數最近的數,之後求數組其他數與他的差的絕對值相加即可。寫了半天發現GG。其實我要找的是中位數,並且假如是雙數個的話,中間兩個數都可以。
class Solution(object):
def minMoves2(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sort = sorted(nums)
mid_num = sort[len(nums)//2]
answer = 0
for i in nums:
answer += abs(i-mid_num)
return answer