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])