我试图找出列表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
答案 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
>>>