[LeetCode] 1046. Dernier poids de pierre

Nous avons une collection de pierres, chaque pierre a un poids entier positif.

Chaque tour, nous choisissons les deux pierres les plus lourdes et les brisons ensemble. Supposons que les pierres aient des poids x et y avec x <= y. Le résultat de ce smash est:

Si x == y, les deux pierres sont totalement détruites;
Si x! = Y, la pierre de poids x est totalement détruite et la pierre de poids y a un nouveau poids yx.
À la fin, il reste au plus 1 pierre. Renvoie le poids de cette pierre (ou 0 s'il ne reste plus de pierres.)

Exemple 1:

Input: [2,7,4,1,8,1]
Output: 1
Explanation: 
We combine 7 and 8 to get 1 so the array converts to [2,4,1,1,1] then,
we combine 2 and 4 to get 2 so the array converts to [2,1,1,1] then,
we combine 2 and 1 to get 1 so the array converts to [1,1,1] then,
we combine 1 and 1 to get 0 so the array converts to [1] then that's the value of last stone.

Remarque:

  1. 1 <= pierres.longueur <= 30
  2. 1 <= pierres [i] <= 1000

Étant donné que cette question prend les deux plus lourdes à chaque fois, l'idée la plus intuitive est de trier, alors quelle méthode est utilisée pour trier? Parce que nous devons continuer d'insérer et de supprimer, le mieux est la file d'attente prioritaire, car Toutes les opérations sont O (logN). Il convient de noter que la file d'attente prioritaire de Python est représentée par heapq, mais heapq est la file d'attente min, donc si vous souhaitez convertir en file d'attente max, vous devez inverser le contenu du membre. La complexité temporelle finale est O (NlogN) et la complexité spatiale est O (N).

import heapq
class Solution:
    def lastStoneWeight(self, stones: List[int]) -> int:
        if not stones: return 0
        
        heap = []
        for stone in stones:
            heappush(heap, -stone)
            
        while len(heap) >= 2:
            s1 = heappop(heap)
            s2 = heappop(heap)
            heappush(heap, s1-s2)
        
        if not heap: return 0
        return -heappop(heap)

Je suppose que tu aimes

Origine www.cnblogs.com/codingEskimo/p/12689133.html
conseillé
Classement