LeetCode 1046. 最後一塊石頭的重量(python)

題目描述:

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

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

如果 x == y,那麼兩塊石頭都會被完全粉碎;
如果 x != y,那麼重量爲 x 的石頭將會完全粉碎,而重量爲 y 的石頭新重量爲 y-x。
最後,最多隻會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 0。

提示:

1 <= stones.length <= 30
1 <= stones[i] <= 1000

解題思路:

將數組排序,選出最大的兩個做差,如果差值不爲0,將差值添加到去除最大兩個數之後的數組中
重複上述步驟,直到數組長度小於等於1爲止
由於每進行一次操作都要進行一次排序,時間複雜度爲n^2
————————————————
解法1:

class Solution(object):
    def lastStoneWeight(self, stones):
        """
        :type stones: List[int]
        :rtype: int
        """
        while len(stones)>1:
            stones.sort()
            x=stones[-1]-stones[-2]
            stones=stones[:-2]
            if x!=0:               
                stones.append(x)
            #print(stones)
        return 0 if len(stones)==0 else stones[0]

解法2:堆:

在python中的堆默認是小根堆,爲了實現大根堆,一個方式是把所有的數字進行取反操作,最後的結果再取反即可

import heapq
class Solution(object):
    def lastStoneWeight(self, stones):
        """
        :type stones: List[int]
        :rtype: int
        """
        stones = [-x for x in stones]
        heapq.heapify(stones)
        while len(stones) > 1:
            x = heapq.heappop(stones)
            y = heapq.heappop(stones)
            if x != y:
                heapq.heappush(stones, -abs(x - y))
        return 0 if not stones else -stones[0]

 

發佈了117 篇原創文章 · 獲贊 415 · 訪問量 55萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章