Python 如何获取数组中不存在的最小正整数

Python 如何获取数组中不存在的最小正整数,python,arrays,list,sorting,Python,Arrays,List,Sorting,我试图找出列表中不存在的最小正数a def smallitem(a): a = sorted(set(a)) lst = [] for item in a: item + = 1 if item not in a: lst.append(item) continue mst = [] for item in lst: if item < 1: it

我试图找出列表中不存在的最小正数
a

def smallitem(a):
    a = sorted(set(a))
    lst = []
    for item in a:
        item + = 1
        if item not in a:
        lst.append(item)
        continue
    mst = []
    for item in lst:
        if item < 1:
            item += 1
            if item not in a:
                mst.append(item)
                continue
    n = 0
    if mst:
        n = min(mst)
    return n or min(lst)
def smallitem(a):
a=已排序(集合(a))
lst=[]
对于a中的项目:
项目+=1
如果项目不在a中:
第一个附加项(项目)
持续
mst=[]
对于lst中的项目:
如果项目<1:
项目+=1
如果项目不在a中:
mst.append(项目)
持续
n=0
如果mst:
n=最小值(mst)
返回n或最小值(lst)
我想我已经找到了解决办法,但我认为我的解决方法并不正确

例如:

smallitem([-1,-3])#1


smallitem([1,3,6,4,1,2,87])#5

您可以将列表转换为一个集合,然后继续从1递增一个正整数,直到在集合中找不到它:

def smallitem(a):
    set_a = set(a)
    i = 1
    while i in set_a:
        i += 1
    return i

也许有一种更轻松的方法可以做到这一点。 时间复杂度始终为O(n)


下面是另一种方法:

def smallitem(l):
    l = list(set(sorted(l)))
    x = l[0]
    for i in l:
        if i != x and x >= 1:return x
        x += 1
    return 1
测试:

>>> smallitem([-3, -1])
1
>>> smallitem([1, 3, 6, 4, 1, 2, 87])
5
>>> 

使用集合而不是列表有什么好处?集合的
运算符的平均时间复杂度为O(1),而列表的
运算符的平均时间复杂度为O(n)。
>>> smallitem([-3, -1])
1
>>> smallitem([1, 3, 6, 4, 1, 2, 87])
5
>>>