leetcode陣列--最少移動次數使陣列元素相等
阿新 • • 發佈:2018-12-26
題目
給定一個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動可以使 n - 1 個元素增加 1。
示例:
輸入:
[1,2,3]
輸出:
3
解釋:
只需要3次移動(注意每次移動會增加兩個元素的值):
[1,2,3] => [2,3,3] => [3,4,3] => [4,4,4]
思路
一開始自己對其理解有偏差,所有的數與最大的數比較,每一次用最小的數加一直到等於最大的數,從網上看到可以逆向思維,用所有元素之和減去最小值與長度的乘積。
程式碼
class Solution(object):
def minMoves (self, nums):
"""
:type nums: List[int]
:rtype: int
"""
return sum(nums)-min(nums)*len(nums)
題目二
給定一個非空整數陣列,找到使所有陣列元素相等所需的最小移動數,其中每次移動可將選定的一個元素加1或減1。 您可以假設陣列的長度最多為10000。
例如:
輸入:
[1,2,3]
輸出:
2
說明:
只有兩個動作是必要的(記得每一步僅可使其中一個元素加1或減1):
[1,2,3] => [2,2,3] => [2,2,2]
思路
先對陣列進行排序,然後找到中位數,所有數與中位數之差的和,就為移動步數
程式碼
class Solution(object):
def minMoves2(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
mid = len(nums)//2
res =0
for n in nums:
res +=abs(n-nums[mid])
return res