1. 程式人生 > >LeetCode 462.最少移動次數使陣列元素相等II

LeetCode 462.最少移動次數使陣列元素相等II

給定一個非空整數陣列,找到使所有陣列元素相等所需的最小移動數,其中每次移動可將選定的一個元素加1或減1。 您可以假設陣列的長度最多為10000。

例如:

輸入:
[1,2,3]

輸出:
2

說明:
只有兩個動作是必要的(記得每一步僅可使其中一個元素加1或減1): 

[1,2,3]  =>  [2,2,3]  =>  [2,2,2]

我們要找到能夠讓大家移動次數最少的數字,這個數字一定在最大到最小的數字之間。

假設為數字i,最大的數字a,和最小數字b,需要移動的次數總和=(a-i)+(i-b)=a-b

倒數第二大的數字,和第二小的數字也是如此。

所以最中間的數字是我們要找的數字。

如果nums長度為奇數,就是找中位數。如果nums長度為偶數,就找中間兩個數字的平均數。

class Solution:
    def minMoves2(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        middle=int(len(nums)/2)
        count=0
        for i in range(middle):
            count=count+(nums[len(nums)-1-i]-nums[i])
        return count