📅  最后修改于: 2023-12-03 15:07:13.906000             🧑  作者: Mango
给定一个元组和一个整数 M,从该元组中删除 M 个元素,使得剩余元素的种类数最小。返回种类数。
输入: [1,2,3,4,5], M = 2
输出: 3
解释: 删除 2 个元素后,剩余元素为 [1,2,3] 或者 [2,3,4],均有 3 种不同的元素。
输入: [1,1,2,3,3,3], M = 3
输出: 2
解释: 删除 3 个元素后,剩余元素为 [1,2] 或者 [2,3],均有 2 种不同的元素。
要想剩余元素的种类数最小,我们需要删除的是出现次数最多的元素。我们可以先统计每个元素出现的次数,然后按照出现次数从大到小排序。接着我们从出现次数最多的元素开始删除,直到删除 M 次或者某种元素被删除完,便可以得到剩余元素的种类数。
def min_different_elements(nums: List[int], M: int) -> int:
count = collections.Counter(nums)
sorted_count = sorted(count.items(), key=lambda x: x[1], reverse=True)
for key, value in sorted_count:
if M >= value:
M -= value
else:
return len(sorted_count) - 1
return len(sorted_count)