有一堆石頭,每塊石頭的重量都是正整數。
每一回合,從中選出兩塊 最重的 石頭,然后將它們一起粉碎。假設石頭的重量分別為 x 和 y,且 x <= y。那么粉碎的可能結果如下:
如果 x == y,那么兩塊石頭都會被完全粉碎;
如果 x != y,那么重量為 x 的石頭將會完全粉碎,而重量為 y 的石頭新重量為 y-x。
最后,最多只會剩下一塊石頭。返回此石頭的重量。如果沒有石頭剩下,就返回 0。
示例:
輸入:[2,7,4,1,8,1]
輸出:1
解釋:
先選出 7 和 8,得到 1,所以數組轉換為 [2,4,1,1,1],
再選出 2 和 4,得到 2,所以數組轉換為 [2,1,1,1],
接著是 2 和 1,得到 1,所以數組轉換為 [1,1,1],
最后選出 1 和 1,得到 0,最終數組轉換為 [1],這就是最后剩下那塊石頭的重量。
代碼
class Solution {public int lastStoneWeight(int[] stones) {PriorityQueue<Integer> priorityQueue=new PriorityQueue<>(((o1, o2) -> o2-o1));for(int c:stones) priorityQueue.add(c);//所有石頭入隊while (priorityQueue.size()>1){int a=priorityQueue.poll();//將最大的兩塊石頭出隊int b=priorityQueue.poll();int c= Math.abs(a-b);if(c>0) priorityQueue.offer(c);//如果大小不一,將剩下的入隊}return priorityQueue.size()==1?priorityQueue.poll():0;}
}