Day 12 of 30-Day LeetCode Challenge

We have a collection of stones, each stone has a positive integer weight.

Each turn, we choose the two heaviest stones and smash them together. Suppose the stones have weights x and y with x <= y. The result of this smash is:

  • If x == y, both stones are totally destroyed;
  • If x != y, the stone of weight x is totally destroyed, and the stone of weight y has new weight y-x.

At the end, there is at most 1 stone left. Return the weight of this stone (or 0 if there are no stones left.)

class Solution {
int lastStoneWeight(vector<int>& stones) {

//Use binary heap
priority_queue<int> q;
for(auto x:stones){

int a =;
int b =;
int diff = a-b;
if(diff>=0) q.push(diff);
cout<<a<<”, “<<b<<”, “<<diff<<endl;



We never really grow up, we only learn how to act in public

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store