Description
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
分析
题目的意思是:给你一个数组,删除K个数了之后,要求剩下的数的种类最少。读懂了之后发现是要先删除频率低的数,如果能发现这个就很直接,直接统计数的频率,然后。我这里用了defaultdict+排序。我看了一下用counter好像更好,直接就是排序好的了。
代码
class Solution:
def findLeastNumOfUniqueInts(self, arr: List[int], k: int) -> int:
a=collections.defaultdict(int)
for num in arr:
a[num]+=1
b=sorted(a.items(),key=lambda x:x[1])
res=0
for i in range(len(b)):
key,v=b[i]
if(k>v):
k-=v
elif(k==v):
res=len(b)-i-1
break
else:
res=len(b)-i
break
return res