1. 程式人生 > 實用技巧 >LeetCode 1338. 陣列大小減半

LeetCode 1338. 陣列大小減半

題目連結

1338. 陣列大小減半

題目分析

這個題沒啥好說的,只能直接先統計每個數字出現的次數,然後優先刪除出現次數多的,因為題目要求我們得到的結果集是“最小”的,所以就利用貪心的思想了。
我寫這個題主要是為了記錄優先佇列的使用,因為刷題那麼久了,真正用過優先佇列的次數卻不是很多。

程式碼實現

class Solution {
    public int minSetSize(int[] arr) {
        HashMap<Integer, Integer> map = new HashMap<>();
        for(int num : arr){
            map.put(num, map.getOrDefault(num, 0) + 1);
        }
        int res = 0;
        int count = 0;
        PriorityQueue<Integer> heap = new PriorityQueue<>((n1, n2) -> n2 - n1);
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            heap.offer(entry.getValue());
        }
        while(!heap.isEmpty()){
            count += heap.poll();
            res++;
            if(count >= (arr.length >> 1)){
                break;
            }
        }
        return res;
    }
}

總結

還是得多實操一下各種資料結構,不然這個題排起序來真的各種TLE