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

时间:2018-10-18 04:28:12

标签: 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:
            item += 1
            if item not in a:
                mst.append(item)
                continue
    n = 0
    if mst:
        n = min(mst)
    return n or min(lst)

我认为我已经有了解决方案,但对我来说,这样做似乎不正确。

例如:

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

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

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

def small_item(a):
    s = set(a)
    for i in range(1, max(s)):
        if i not in s:
            return i
    return max(max(s) + 1, 1)

print small_item([1,3,6,4,1,2, 87])
print small_item([-1, -3])

答案 2 :(得分:0)

这是另一种方法:

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
>>>