ここでのオリジナルタイトルリンク:https://leetcode.com/problems/last-stone-weight/
トピック:
私たちは、岩のコレクションを持って、それぞれの岩は、正の整数量を有しています。
各ターンでは、我々は2つの重い岩を選択し、それらを粉砕します。石が重みを持っていると仮定 x
し、 y
と x <= y
。このスマッシュの結果は次のとおりです。
- 場合は
x == y
、両方の石は完全に破壊されています。 - 場合は
x != y
、重さの石がx
完全に破壊され、重量の石はy
、新たな重みを持っていますy-x
。
最後には、左の最大1石があります。(残された石が存在しない場合は0。)この石の重さを返します。
例1:
入力:[2,7,4,1,8,1] 出力:1 説明: 私たちは、1を得るために7を組み合わせて、8ので、アレイは、に変換し、[2,4,1,1,1]、その後、 我々は2を組み合わせて、 4 2を取得するので、アレイは[2,1,1,1]次に、に変換する ので、アレイは[1,1,1]次に、に変換する1を取得するために、我々は2と1を組み合わせ 0を得るために、我々は結合1,1したがってアレイは、[1]次に、それが最後に石の値ですに変換します。
注意:
1 <= stones.length <= 30
1 <= stones[i] <= 1000
ソリューション:
最大ヒープにすべての石を置きます。
ヒープサイズ> = 2、世論調査のトップ2の要素との差分を取得しています。diffが0より大きい場合は、ヒープに戻って、それを追加します。
時間計算:O(nlogn)。N = stones.length。ループはmaximumnのn-1回実行することができながら。
スペース:O(n)を。
ACのJava:
1 クラスソリューション{ 2 公共 INT lastStoneWeight(INT []石){ 3 であれば(石== NULL || stones.length == 0 ){ 4 戻り 0 ; 5 } 6 7 優先度つきキュー<整数> maxHeap = 新しい優先度つきキュー<> (Collections.reverseOrder())。 8 用(INTの石:石){ 9 maxHeap.add(石)。 10 } 11 12 ながら(maxHeap.size()> 1){ 13 、INT X = maxHeap.poll()。 14 のint Y = maxHeap.poll()。 15 INTデフ= X- Y; 16 であれば(差分> 0 ){ 17 maxHeap.add(差分)。 18 } 19 } 20 21 リターン maxHeap.isEmpty()?0 :maxHeap.peek(); 22 } 23 }
追いつく最終ストーン重II。