简体   繁体   中英

How do I get smallest postitive integer not present in the array

I am trying to find out smallest positive number not present in the list 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)

I think I have got the solution but it doesnt look correct to me the way I have done it.

for example:

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

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

You can convert the list to a set and then keep incrementing a positive integer from 1 until it is not found in the set:

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

Perhaps there's a lighter way do this. The time complexity is always 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])

Here's anther way to do this:

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

Testing:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM