題目:原題鏈接(簡單)
解法 | 時間複雜度 | 空間複雜度 | 執行用時 |
---|---|---|---|
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])