Algorithm 如何在较低的时间复杂度下找到不在给定数组中的最小正整数?

Algorithm 如何在较低的时间复杂度下找到不在给定数组中的最小正整数?,algorithm,Algorithm,给定一个数组,不考虑如何计算出高性能内存使用率的最小正整数,且该整数不应在数组中,并且给定数组中可能存在重复的正整数和负整数 例如,给定一个数组: 案例1: when l = [-4, 7, 2, 2, 2, 3, 3, 4] return 1 案例2: when l = [-3, -9, 1, 2, 3, 7, 5] return 4 我尝试过类似以下python代码: def find_min_not_in(l): min = -sys.maxint for i in

给定一个数组,不考虑如何计算出高性能内存使用率的最小正整数,且该整数不应在数组中,并且给定数组中可能存在重复的正整数和负整数

例如,给定一个数组:

案例1:

when l = [-4, 7, 2, 2, 2, 3, 3, 4]  
return 1
案例2:

when l = [-3, -9, 1, 2, 3, 7, 5]
return 4
我尝试过类似以下python代码:

def find_min_not_in(l):
    min = -sys.maxint
    for i in l:
       min = i if i > 0 and i < abs(min)
    if min <= 0 or min >= 2:
       return min = 1
    while min in l:
       min = min+1
    return min

但这并不是最好的,因为在op中,一次又一次地扫描整个阵列。我想要一个低时间复杂度的解决方案。

我不知道这是不是一个性能更高的解决方案,但我使用了集合理解和集合操作的组合,它们通常都很快。第一行创建一组删除重复项的列表。此外,还有一个条件,即仅在该列表中创建具有正整数的集合。第二条语句将该范围内的数字与列表中的数字进行比较。这比排序快,因为排序需要n^2次,而集合创建需要n次。因为我们不关心重复值,所以可以使用集合方法

lis_1 = [-4, 7, 2, 2, 2, 3, 3, 4]
lis_2 = [-3, -9, 1, 2, 3, 7, 5]
def find_least_not_in(l):
    s_l = {x for x in l if x > 0}
    return min(set(range(1,max(s_l)+1)).difference(s_l))
print "Case 1: ", find_least_not_in(lis_1)
print "Case 2: ", find_least_not_in(lis_2)
下面是我运行它时的输出:

=================== RESTART: C:/Users/Joe/Desktop/stack.py ===================
Case 1:  1
Case 2:  4
>>> 

请展示您迄今为止的研究/调试工作。请先看这一页。对不起,在这里四年多之后,我希望有一个更好的问题,你不觉得吗?不仅如此,你应该校对你的问题。拼写错误重复。不在数组中。。。你的意思是不在阵列中吗?。请澄清高性能。内存使用率,还是运行时?在考虑优化之前,你应该先有一个有效的解决方案。抱歉,各位,语法错误,我不是一个会说英语的人,我现在添加了我的尝试解决方案。你能澄清一下“高性能”是什么意思吗?名单能有多大?如果只有1000个左右的数字,那么使用什么算法就无关紧要了。