# minHeap: find last stone weight

Tue Aug 16 2022 06:14:12 GMT+0000 (UTC)

```class Solution:
def lastStoneWeight(self, stones: List[int]) -> int:
stones = [-s for s in stones]
heapq.heapify(stones)

while len(stones) > 1:
first = abs(heapq.heappop(stones)) #linear time for python
second = abs(heapq.heappop(stones))

if first > second:
heapq.heappush(stones, second - first) #remember that since it's a minHeap we need negative numbers so it's second - first

#edge case to account if stones is empty whether originally or after smashing
stones.append(0)

return abs(stones[0])```
content_copyCOPY

You are given an array of integers stones where stones[i] is the weight of the ith stone. We are playing a game with the stones. On each turn, we choose the heaviest two stones and smash them together. Suppose the heaviest two stones have weights x and y with x <= y. The result of this smash is: If x == y, both stones are destroyed, and If x != y, the stone of weight x is destroyed, and the stone of weight y has new weight y - x. At the end of the game, there is at most one stone left. Return the weight of the last remaining stone. If there are no stones left, return 0.

https://leetcode.com/problems/last-stone-weight/