LeetCode 1338. 陣列大小減半
阿新 • • 發佈:2020-07-31
題目連結
題目分析
這個題沒啥好說的,只能直接先統計每個數字出現的次數,然後優先刪除出現次數多的,因為題目要求我們得到的結果集是“最小”的,所以就利用貪心的思想了。
我寫這個題主要是為了記錄優先佇列的使用,因為刷題那麼久了,真正用過優先佇列的次數卻不是很多。
程式碼實現
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