1046. Last Stone Weight

思路:

直接用大顶堆,每次取两个数来比较即可,难点是循环的条件为什么。
考虑两种情况,最后堆只有一个元素,那么就返回这个元素值,最后堆没有元素,为什么呢,因为我们每次去两个数,如果倒数第二步还剩下两个石头,且相同重量,那么最后就没有元素了。针对这两种情况都是堆的元素数量>1,因为最后结果只有1和0嘛,所以循环条件就为堆的元素数量>1。
最后要判断堆到底是1个还是0个元素,通过 三目运算符判断。即 pq.empty()==0 ? pq.top():0

代码:

class Solution {
public:
    int lastStoneWeight(vector<int>& stones) {
        priority_queue<int,vector<int>> pq;
        for(auto& stone:stones){
            pq.push(stone);
        }
        while(pq.size()>1){
            int y=pq.top(); pq.pop();
            int x=pq.top(); pq.pop();
            if(y==x) continue;
            else if(x!=y) pq.push(y-x);
        }
        return (pq.empty()==0? pq.top():0);
    }
};
posted @ 2021-04-08 21:59  Mrsdwang  阅读(31)  评论(0编辑  收藏  举报