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);
}
};