尽管我保留了一个条件,这样它就不会检查索引不在指定限制内的状态,但我还是得到了超出范围的列表索引。请检查下面的代码。
T=int(input())
c=1;
f=0;
d=[]
for i in range(T):
a=int(input())
A=list(map(int, input().strip().split()))
b=int(input())
B=list(map(int, input().strip().split()))
for j in range(a-1):
for k in range(b):
if(A[j] == B[k]):
if(j+c < a, k+c< b):
while(f==0):
if(j+c < a, k+c < b):
c += 1
if(A[j+c]==B[k+c]):
f=1
if(f==0):
d.append(c)
f=0;
c=1;
d.sort;
d= []
print (d[-1])
这是我得到的错误:
Runtime Error:
Runtime ErrorTraceback (most recent call last):
File "/home/a065c7cd2e000ec65fe6b148ca7dee08.py", line 17, in <module>
if(A[j+c]==B[k+c]):
IndexError: list index out of range
我试图解决最长公增子序列的问题。如果能以其他方式提供正确的答案,那将很有帮助。:(
给定两个数组,求最长公共递增子序列(LCIS(的长度。例如,A[]={3,4,9,1}和B[]={5,3,8,9,10,2,1}的LCIS的长度为2(子序列{3,9}是最长的子序列,既常见又增加。另一个例子是A[]={1,1,4,3}和B[]={1、1、3、4}的LCIS为2(有两个子序列{1,4}和{1,3}(。
首先,语句if(a, b):
与if(a and b):
不同,因为if(a, b):
正在检查元组(a, b)
是否为空,并且由于它不为空,因此无论怎样都会返回true。尝试
if(False, False):
print('What?!')
并查看打印是否执行。
对于您的问题,在您的代码中,您有以下内容:
if(j+c < a and k+c < b):
c += 1
if(A[j+c]==B[k+c]):
因此,假设j+c
是1,a
是2,我们将进入块。然后,我们给c
加一,所以现在j+c
是2,a
是2,然后我们检查A[2]
,它是越界的。
顺便说一下,您可以使用len函数来获取列表的长度。所以你的输入可能看起来像:
A=list(map(int, input('A:').strip().split()))
B=list(map(int, input('B:').strip().split()))
a, b = len(A), len(B)