LeetCode 1046最終ストーン重量最終ストーン重II

ここでのオリジナルタイトルリンク: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. 1 <= stones.length <= 30
  2. 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

おすすめ

転載: www.cnblogs.com/Dylan-Java-NYC/p/11785085.html