思路
每一步都会从石头中取出最大的两个石头,涉及最大n和最小n优先想到的就是堆数据结构(优先级队列结构)。
方法
将石头数组建大根堆,每次操作取两次堆顶进行比较,相同全部摧毁,不同则将差值插入堆中。
代码
class Solution {
public:
int lastStoneWeight(vector<int>& stones) {
priority_queue<int> q;
for (int s: stones) q.push(s);
while (q.size() > 1) {
int a = q.top();
q.pop();
int b = q.top();
q.pop();
if (a > b) q.push(a -b);
}
return q.empty()? 0:q.top();
}
};