为什么即使我保留了检查条件,列表索引也会超出范围?



尽管我保留了一个条件,这样它就不会检查索引不在指定限制内的状态,但我还是得到了超出范围的列表索引。请检查下面的代码。

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)

相关内容

  • 没有找到相关文章

最新更新