一說到要取出最大的兩個,就會想到用 sort() 排列。 ※注意 sort() 是從小而大排列,想要反敘可以這樣寫 sort(reverse = True)。
每一次取出前兩個對減,加回去再重新排列,重複步驟直到不能再進行,這是最直覺的方式。
排列之後會照大小排列,如果取出兩元素相減後還 >= 剩下的第一個元素,代表兩者是當前最大的兩元素,就可以繼續相減。
條件不符合加回去再重新排列,這樣可以減少不必要的排列次數。
class Solution: def lastStoneWeight(self, stones: List[int]) -> int: n = len(stones) while n > 1: stones.sort(reverse = True) v = stones.pop(0) while n > 1 and v >= stones[0]: v -= stones.pop(0) n -= 1 if v == 0: n-= 1 else: stones.append(v) if stones: return stones[-1] else: return 0