最後の石ジャワの重さ

石の山があり、各石の重さは正の整数です。

各ラウンドで、それらから最も重い2つの石を選択し、それらを一緒に粉砕します。石の重さがxとyで、x <= yであるとします。粉砕の可能な結果は次のとおりです。

x == yの場合、両方の石が完全に粉砕されます
。x!= yの場合、重量xの石は完全に粉砕され、重量yの石の新しい重量はyxになります。
結局、残る石はせいぜい1つだけです。この石の重量を返します。石が残っていない場合は、0を返します。

例:

入力:[2,7,4,1,8,1]
出力:1
説明:
最初に7と8を選択して1を取得し、配列が[2,4,1,1,1]に変換され
、次に2に変換されます。そして4、get 2、配列は[2,1,1,1]に変換され、
次に2と1、get 1、配列は[1,1,1]に変換され、
最後に1と1は選択すると、0が取得されます。最終的な配列は[1]に変換されます。これは、最後に残っている石の重量です。

促す:

1 <= stones.length <= 30
1 <= stones [i] <= 1000

アイデア:私はそれを一種の暴力で書いたので、ここには投稿しません。公式の最大の山を投稿して学びます。

class Solution {
    
    
    public int lastStoneWeight(int[] stones) {
    
    
        //最大堆
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>((a, b) -> b - a);
        for (int stone : stones) {
    
    
            pq.offer(stone);
        }

        while (pq.size() > 1) {
    
    
            int a = pq.poll();
            int b = pq.poll();
            if (a > b) {
    
    
                pq.offer(a - b);
            }
        }
        return pq.isEmpty() ? 0 : pq.poll();
    }
}

おすすめ

転載: blog.csdn.net/weixin_43824233/article/details/111982881