我正在尝试在python中编写一个简单的代码以查找第一个缺少的正整数。我的算法是创建一个由零组成的数组,其输入数组中的最大正整数的大小为+1(例如,如果最大数为7,则0的数组的大小为8)。然后,我跟踪输入数组,每当找到一个正数时,便将第二个数组中的索引值+1更改为1。这是我的代码:
def minPositive(a):
max_a = max(a)
b = [0]*(max_a+1) # This is the second array initialized to zero
for i in range(len(a)):
if a[i] > 0:
b[a[i]+1]= 1
for j in range(len(b)):
if j != 0:
if b[j] == 0:
return j
但是,当我编写此代码时,我会遇到“列表索引超出范围”。我多次跟踪程序,但找不到错误。
答案 0 :(得分:0)
Python从0
开始索引,因此长度为n
的列表没有第n
个元素。同样,具有n+1
个元素的列表也没有第n+1
个元素。
对于a
中的每个正值(而不是值加1),一个选项是将与b
中的该值相对应的索引设置为1
。您可以这样重写您的函数(简化一下):
def minPositive(a):
b = [1 if n in a and n > 0 else 0 for n in range(max(a) + 1)]
return b
或者您可以将列表b
延长一个元素。