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