📌  相关文章
📜  从给定数组构造MEX数组(1)

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

从给定数组构造MEX数组

MEX(Minimum EXcluded)数组,指的是由非负整数组成的、不包含最小未出现正整数的数组。例如,对于数组 [0, 1, 2, 4],其 MEX 数组为 3,因为最小未出现正整数为 3。

本文将介绍如何构造 MEX 数组。假设我们已有一个长度为 n 的数组 a,我们的目标是构造出一个 MEX 数组。

方法一

首先,我们可以对数组 a 进行排序。

a = sorted(a)

然后,我们可以遍历数组 a,检查每个元素与它的下一个元素之间是否有缺口。如果有,我们可以直接返回这个缺口的值作为 MEX 数组的值。

n = len(a)
for i in range(n-1):
    if a[i+1] - a[i] > 1:
        return a[i]+1

如果数组 a 中没有缺口,我们可以返回数组末尾元素加 1。

return a[-1]+1

这种方法的时间复杂度为 O(nlogn),主要来自排序操作。

方法二

另一种思路是使用集合 Set 来处理。我们可以先将数组 a 转换为集合 s。

s = set(a)

然后,我们可以从 0 开始遍历自然数,如果某个自然数不在集合 s 中,则它就是 MEX 数组的值,可以直接返回。

i = 0
while i in s:
    i += 1
return i

这种方法的时间复杂度为 O(n),主要来自集合转换操作和遍历自然数的操作。

总结

本文介绍了两种构造 MEX 数组的方法。第一种方法基于排序,时间复杂度为 O(nlogn);第二种方法基于集合,时间复杂度为 O(n)。具体选择哪种方法,应根据具体情况而定。