📅  最后修改于: 2023-12-03 14:50:37.809000             🧑  作者: Mango
给定一个长度为 $N$ 的非负整数数组 $A$,数组中可能存在重复元素。定义数组 $A$ 的 $\text{MEX}$ 为未出现在数组 $A$ 中的最小非负整数,即
$$ \text{MEX}(A) = \min_{i=0}^{\infty}{i\notin A} $$
现在你可以选择 $A$ 中的一些元素删除(可以删除所有元素),求最多可以删除多少个元素,使得 $\text{MEX}(A)$ 不变。
题意比较简单,实际上就是让我们求出数组中未出现过的最小非负整数,并计算最多可以删除多少个元素。我们可以通过一次扫描的方法来实现,具体做法如下:
以下是该算法的Python示例代码:
def max_deleted_elements(A):
A.sort()
n, k = len(A), 0
for i in range(n + 1):
if i == n or A[i] > i:
return i - k
k += A[i] <= i
时间复杂度为 $O(N\log N)$,空间复杂度为 $O(1)$。