1046 最後一塊石頭的重量

2021-10-13 13:07:08 字數 916 閱讀 6979

有一堆石頭,每塊石頭的重量都是正整數。

每一回合,從中選出兩塊 最重的 石頭,然後將它們一起粉碎。假設石頭的重量分別為 x 和 y,且 x <= y。那麼粉碎的可能結果如下:

如果 x == y,那麼兩塊石頭都會被完全粉碎;

如果 x != y,那麼重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y-x。

最後,最多隻會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 0。

示例:輸入:[2,7,4,1,8,1]

輸出:1

解釋:先選出 7 和 8,得到 1,所以陣列轉換為 [2,4,1,1,1],

再選出 2 和 4,得到 2,所以陣列轉換為 [2,1,1,1],

接著是 2 和 1,得到 1,所以陣列轉換為 [1,1,1],

最後選出 1 和 1,得到 0,最終陣列轉換為 [1],這就是最後剩下那塊石頭的重量。

1.排序

2.topk思路用堆最好!

class solution:

def laststoneweight(self, stones: list[int]) -> int:

while len(stones)>=2:

stones.sort()

return stones[0]

class solution:

def laststoneweight(self, stones: list[int]) -> int:

heap=[-s for s in stones]

heapq.heapify(heap)

while len(heap)>1:

if x!=y:

return 0 if not heap else -heap[0]

1046 最後一塊石頭的重量

class solution def laststoneweight self,stones import heapq heap for i in stones left stones len stones while left stones 1 總是位於索引0處 並確保剩餘元素中最小的那個位於索引...

1046 最後一塊石頭的重量

問題 有一堆石頭,每塊石頭的重量都是正整數。每一回合,從中選出兩塊最重的石頭,然後將它們一起粉碎。假設石頭的重量分別為 x 和 y,且 x y。那麼粉碎的可能結果如下 如果 x y,那麼兩塊石頭都會被完全粉碎 如果 x y,那麼重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y x。最...

1046 最後一塊石頭的重量

有一堆石頭,每塊石頭的重量都是正整數。每一回合,從中選出兩塊最重的石頭,然後將它們一起粉碎。假設石頭的重量分別為 x 和 y,且 x y。那麼粉碎的可能結果如下 如果 x y,那麼兩塊石頭都會被完全粉碎 如果 x y,那麼重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y x。最後,最...