Least Number of Unique Integers after K Removals

Given an array of integers arr and an integer k. Find the least number of unique integers after removing exactly k elements.


 

Example 1:

Input: arr = [5,5,4], k = 1
Output: 1
Explanation: Remove the single 4, only 5 is left.

Example 2:
Input: arr = [4,3,1,1,3,3,2], k = 3
Output: 2
Explanation: Remove 4, 2 and either one of the two 1s or three 3s. 1 and 3 will be left.
 

Constraints:


Solution:

class Solution {
    public int findLeastNumOfUniqueInts(int[] arr, int k) {
        Map<Integer, Integer> map = new HashMap();
        for (int val : arr) {
            map.put(val, map.getOrDefault(val, 0) + 1);
        }
        PriorityQueue<Map.Entry<Integer, Integer>> pq = new PriorityQueue<Map.Entry<Integer, Integer>>((a, b) -> { return Integer.compare(a.getValue(), b.getValue()); });
        for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
            pq.offer(entry);
        }
        while (!pq.isEmpty() && k > 0) {
            Map.Entry<Integer, Integer> next = pq.poll();
            if (k < next.getValue()) {
                pq.offer(next);
            }
            k -= Math.min(k, next.getValue());
        }
        return pq.size();
    }
}