Last Stone Weight - Leetcode
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
Example 1:
Note:
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 weightx
is totally destroyed, and the stone of weighty
has new weighty-x
.
Example 1:
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.
Note:
1 <= stones.length <= 30
1 <= stones[i] <= 1000
class Solution {
public int lastStoneWeight(int[] stones) {
PriorityQueue<Integer> queue = new PriorityQueue<Integer>(Comparator.reverseOrder());
for (int stone : stones) { queue.offer(stone); }
while (queue.size() > 1) {
queue.offer(queue.poll() - queue.poll());
}
return queue.peek();
}
}
Try this on Leetcode
Here Priority Queue is the best solution.
Comparator.reverseOrder() is used to reverse the queue in reverse of natural order(i.e., descending order). Reversing is done to find difference between first max and second max elements.
offer() - add element into queue.
peek() - retrieves top element in queue
poll() - retrieves and removes element from front of queue container
If anyone had different solution leave it as a comment
Comments
Post a Comment