Saturday, August 22, 2020

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
    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