LeetCode題解(0453):使數組元素相等的最小移動次數(Python)

題目:原題鏈接(簡單)

解法 時間複雜度 空間複雜度 執行用時
Ans 1 (Python) O(n) 超出時間限制
Ans 2 (Python) O(n) O(1) 316ms (78.52%)

LeetCode的Python執行用時隨緣,只要時間複雜度沒有明顯差異,執行用時一般都在同一個量級,僅作參考意義。

解法一(實際操作法):

【思路】

模擬實際操作,每次操作保留一個最大值,並將數組中其他的值+1,直到數組中所有數相同爲止。

def minMoves(self, nums: List[int]) -> int:
    step = 0
    while len(set(nums)) > 1:
        maximum = max(nums)
        nums.remove(maximum)
        nums = [i + 1 for i in nums]
        nums.append(maximum)
        step += 1
    return step

解法二(Pythonic):

【思路】

每一次的相加,實際上相當於消除了超過最小值的1;因此,只需要統計數組超過數組最小值一共多少即可。

def minMoves(self, nums: List[int]) -> int:
    minimum = min(nums)
    return sum([n - minimum for n in nums])
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章