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:
- 1 <= arr.length <= 10^5
- 1 <= arr[i] <= 10^9
- 0 <= k <= arr.length
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();
}
}