每日一道算法题--leetcode 1046-- 最后一块石头的重量(堆)--python

526 阅读1分钟

【题目描述】

【思路解析】

这道题需要不断找top2,很自然可以想到用堆来解决,但是Python中堆默认是小根堆,为了满足题目要求,将所有元素取负,这样一来用小根堆排列出来的数组就是绝对值较大的元素在堆顶了。然后不断推出前两个,如果前两个大小有差,就push进差值,会自动重新调整堆的。只要注意一下判断数组内是否还有元素可以推出即可。

【源代码】

class Solution(object):
    def lastStoneWeight(self, stones):
        import heapq
        stones=map(lambda x:-x,stones)
        heapq.heapify(stones) 
        while(len(stones)>1):
            max1=heapq.heappop(stones)
            if stones:
                max2=heapq.heappop(stones)
                if(max1<max2):
                    heapq.heappush(stones,max1-max2)
        return 0 if not stones else -stones[0]