题目如下:
Given an array of integers
arr
and an integerk
. Find the least number of unique integers after removing exactlyk
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
解题思路:贪心算法, 从出现次数最少的元素删起,然后是次最少。
代码如下:
class Solution(object): def findLeastNumOfUniqueInts(self, arr, k): """ :type arr: List[int] :type k: int :rtype: int """ dic = {} for i in arr: dic[i] = dic.setdefault(i,0) + 1 pair = [] for key,val in dic.iteritems(): pair.append((key,val)) def cmpf(item1,item2): return item1[1] - item2[1] pair.sort(cmp=cmpf) while len(pair) > 0 and k > 0: key,val = pair.pop(0) if k >= val: k -= val else: pair.append((key,val)) break return len(pair)