leetcode462.最少移動次數使數組元素相等 II

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章