📌  相关文章
📜  可以删除的最大元素数,以便给定数组的 MEX 保持不变(1)

📅  最后修改于: 2023-12-03 15:07:26.519000             🧑  作者: Mango

可以删除的最大元素数,以便给定数组的 MEX 保持不变

当处理数组时,我们经常需要找到数组中不存在的最小非负整数(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)。