📅  最后修改于: 2023-12-03 15:06:38.084000             🧑  作者: Mango
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)。具体选择哪种方法,应根据具体情况而定。