Last Stone Weight

Given 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.)

For Example –

Input: {2, 7, 4, 1, 8, 1}, Output: 1

Explanation: 

We combine 7 and 8 to get 1 so the array converts to {2, 4, 1, 1, 1} then,

we combine 2 and 4 to get 2 so the array converts to {2, 1, 1, 1} then,

we combine 2 and 1 to get 1 so the array converts to {1, 1, 1} then,

we combine 1 and 1 to get 0 so the array converts to {1} then that’s the value of last stone.

Last Stone Weight

Programming video tutorials

Programming Questions on Arrays

Programming Questions on Linked List

Programming Questions on String

Last Stone Weight – Java Code

To solve this problem, what we have to do is to remove the two heaviest stones, and then we have to calculate their difference. After that put their difference back. We have to repeat this process until one or zero element is left.

So, We need a data structure from which we get the max element at the top (out of all the elements). So that every time we poll them we get the max weight.

Here, I am going to use Priority queue to solve this problem.

The time complexity of this approach is O(nlogn) and it’s space complexity is O(n).

Tagged . Bookmark the permalink.

About WebRewrite

I am technology lover who loves to keep updated with latest technology. My interest field is Web Development.