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
My answer:
Basic logic: get count of each number, sort them ascending by count, reduce k by each count from the num with smallest quantity until k is negative. Reducing k by one number's count with remaining k>=0 meaning such number can be removed given k elements will be removed
class Solution { public int findLeastNumOfUniqueInts(int[] arr, int k) { Map<Integer, Integer> numCountMap = new HashMap<Integer, Integer>(); for (int i = 0; i < arr.length; i ++) { Integer count = numCountMap.getOrDefault(arr[i], 0); count ++; numCountMap.put(arr[i], count); } List<Integer> list = new ArrayList<>(numCountMap.values()); Collections.sort(list); int uniqNumCount= list.size(); for (Integer element : list) { k -= element; if (k < 0) { break; } else { uniqNumCount --; } } return uniqNumCount; } }
No comments:
Post a Comment