【Leetcode】1046. Last Stone Weight

記錄演算法發表於2021-01-04

題目地址:

https://leetcode.com/problems/last-stone-weight/

給定一個陣列,每次取出兩個最大的數 x x x y y y,如果 x ≠ y x\ne y x=y,則變為 ∣ x − y ∣ |x-y| xy放回陣列,否則取出消失。重複此操作。問陣列最後剩下哪個數(如果不剩則返回 0 0 0)。

可以用最大堆。程式碼如下:

import java.util.PriorityQueue;

public class Solution {
    public int lastStoneWeight(int[] stones) {
        PriorityQueue<Integer> maxHeap = new PriorityQueue<>((x, y) -> -Integer.compare(x, y));
        for (int stone : stones) {
            maxHeap.offer(stone);
        }
        
        while (maxHeap.size() > 1) {
            int x = maxHeap.poll(), y = maxHeap.poll();
            if (x != y) {
                maxHeap.offer(Math.abs(x - y));
            }
        }
        
        return maxHeap.isEmpty() ? 0 : maxHeap.peek();
    }
}

時間複雜度 O ( n log ⁡ n ) O(n\log n) O(nlogn) n n n是陣列長度,空間 O ( n ) O(n) O(n)

相關文章