453 最小移動次數使陣列元素相等

2021-08-26 14:51:13 字數 952 閱讀 2542

給定乙個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動可以使 n - 1 個元素增加 1。

示例:

輸入:

[1,2,3]

輸出:3

解釋:只需要3次移動(注意每次移動會增加兩個元素的值):

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

題目說每次都將餘下n-1個元素加一,其實最優為留下最大的那個,其餘n-1個數都加一,反著想就是最大那個數減一;所以最少的次數就相當於將這個list畫成柱形圖然後按最低的高度削平它,削掉的數量就是最少次數。

如果按照題目的正向意思;來做是會超時的,第乙個程式就是如此。

正向想法

class

solution:

defminmoves

(self, nums):

""" :type nums: list[int]

:rtype: int

"""cnt = 0

while min(nums) != max(nums):

cnt += 1

nums = [x+1

for x in nums]

nums[nums.index(max(nums))] -= 1

print(nums)

return cnt

逆向想法
class

solution:

defminmoves

(self, nums):

""" :type nums: list[int]

:rtype: int

"""min_index = min(nums)

cnt = sum(nums) - len(nums)*min_index

return cnt

453 最小移動次數使陣列元素相等

給定乙個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動可以使 n 1 個元素增加 1 示例 輸入 1,2,3 輸出 3 解釋 只需要3次移動 注意每次移動會增加兩個元素的值 1,2,3 2,3,3 3,4,3 4,4,4 題目解釋 假設陣列的長度為n,每次移動都會是其中n...

453 最小移動次數使陣列元素相等

給定乙個長度為 n 的非空整數陣列,找到讓陣列所有元素相等的最小移動次數。每次移動可以使 n 1 個元素增加 1。示例 輸入 1,2,3 輸出 3 解釋 只需要3次移動 注意每次移動會增加兩個元素的值 1,2,3 2,3,3 3,4,3 4,4,4 解法1 int minmoves vector i...

351,最少移動次數使陣列元素相等 II

給定乙個非空整數陣列,找到使所有陣列元素相等所需的最小移動數,其中每次移動可將選定的乙個元素加1或減1。您可以假設陣列的長度最多為10000。例如 輸入 1,2,3 輸出 2 說明 只有兩個動作是必要的 記得每一步僅可使其中乙個元素加1或減1 1,2,3 2,2,3 2,2,2 答案 public ...