Algorithmusübung nach 45 Gewicht des letzten Steins (Java)

Das Gewicht des letzten Steins

1. Titelbeschreibung

Es gibt einen Steinhaufen und das Gewicht jedes Steins ist eine positive ganze Zahl.

Wählen Sie in jeder Runde die beiden schwersten Steine ​​aus und zerschlagen Sie sie dann. Angenommen, das Gewicht des Steins ist x und y und x <= y. Die möglichen Ergebnisse des Zerkleinerns sind wie folgt:

Wenn x == y, werden beide Steine ​​vollständig zerkleinert,
wenn x! = Y, wird der Stein mit dem Gewicht x vollständig zerkleinert, und das neue Gewicht des Steins mit dem Gewicht y ist yx.
Am Ende bleibt höchstens eine Klappe. Gibt das Gewicht dieses Steins zurück. Wenn keine Steine ​​mehr vorhanden sind, geben Sie 0 zurück.
(Betreff Quelle: LeetCode )

 
示例:
输入:[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],这就是最后剩下那块石头的重量。
提示:
1 <= stones.length <= 30
1 <= stones[i] <= 1000

Zweitens die Lösung

1. Gewalttätige Lösung

class Solution {
    
    
  public int lastStoneWeight(int[] stones) {
    
    
        LinkedList<Integer> linkedList = new LinkedList<>(Arrays.stream(stones).boxed().collect(Collectors.toList()));
        Collections.sort(linkedList);
        //每次计算完排序然后计算
        //直至计算到最后一个数,返回最后结果
        while (linkedList.size() > 1) {
    
    
        	//最大的数
            int first = linkedList.pollLast();
            //次大的数
            int second = linkedList.pollLast();
            int sub=first-second;
            if(sub>0){
    
    
                linkedList.offer(sub);
            }
            Collections.sort(linkedList);
        }
        return linkedList.size()==0?0:linkedList.peek();
    }
}

2. Sortieren der Prioritätswarteschlange (offizielle Lösung)

class Solution {
    
    
    public int lastStoneWeight(int[] stones) {
    
    
    	//新建一个带new Comparator()的有序优先队列
        PriorityQueue<Integer> pq = new PriorityQueue<Integer>((a, b) -> b - a);
        //将石头加入优先队列
        for (int stone : stones) {
    
    
            pq.offer(stone);
        }
		//直接比较即可,PriorityQueue会自动排序
        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();
    }
}

Ich denke du magst

Origin blog.csdn.net/Inmaturity_7/article/details/111999667
Empfohlen
Rangfolge