LeetCode 462.最少移動次數使陣列元素相等II
阿新 • • 發佈:2018-12-21
給定一個非空整數陣列,找到使所有陣列元素相等所需的最小移動數,其中每次移動可將選定的一個元素加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