📅  最后修改于: 2023-12-03 15:07:26.519000             🧑  作者: Mango
当处理数组时,我们经常需要找到数组中不存在的最小非负整数(MEX)。现在假设我们可以删除数组中的任意数量的元素,问我们可以删除的最大元素数,以便给定数组的 MEX 保持不变。
我们可以先对数组进行排序。然后,从最小的非负整数开始检查,如果当前的 MEX 已经存在于数组中,则不需要删除任何元素;否则,我们需要删除当前的 MEX 前面的所有元素(因为它们不会影响 MEX)。删除非负整数时,我们可以利用一个计数器来记录删除次数。最后,所剩余的所有元素都是非负整数,如果存在 n 个非负整数,则 MEX 为 n。
def mex(nums: List[int]) -> int:
nums.sort()
cnt = 0
for i in range(len(nums)):
if nums[i] <= cnt:
continue
cnt += 1
return cnt
def max_removed(nums: List[int]) -> int:
return mex(nums) - nums.count(0)
本题的解法实现比较简单,先排序再遍历查找即可。时间复杂度为 O(NlogN),空间复杂度为 O(1)。