📅  最后修改于: 2023-12-03 15:36:20.051000             🧑  作者: Mango
MEX是指“最小未出现的数字”,也就是在给定数组中没有出现过的最小正整数。从给定数组构造MEX数组,即把给定数组变成一个没有重复数字且从1开始的连续数组。
为了实现从给定数组构造MEX数组的算法,我们需要先找到给定数组中没有出现过的最小正整数。以下是几种可能的算法实现。
我们可以从1开始,依次搜索所有正整数是否在给定数组中出现过。找到第一个没有出现过的正整数即为MEX。这种算法的时间复杂度为O(n^2)。
def mex(arr):
for i in range(1, len(arr) + 2):
if i not in arr:
return i
我们可以在O(n)的时间内构建出一个哈希表,然后从1开始依次搜索哈希表是否存在该正整数。找到第一个没有出现过的正整数即为MEX。这种算法的时间复杂度为O(n),空间复杂度为O(n)。
def mex(arr):
hashset = set(arr)
for i in range(1, len(arr) + 2):
if i not in hashset:
return i
构造MEX数组的算法思路是:依次取出给定数组中的最小未出现的数字,放入MEX数组中。具体来说,我们可以通过以下步骤来实现。
def mex_array(arr):
mex_set = set()
mex_arr = []
for num in arr:
mex_set.add(num)
while len(mex_arr) < mex(mex_arr + list(mex_set)):
mex_arr.append(mex(mex_arr + list(mex_set)))
return mex_arr
本文介绍了从给定数组构造MEX数组的算法,包括求最小未出现的数字和构造MEX数组的方法。实现中使用了暴力搜索和哈希表两种算法,前者的时间复杂度为O(n^2),后者的时间复杂度为O(n),空间复杂度也为O(n)。