我实现了最长递增子序列(LIS)算法,我认为它会起作用,但结果完全是一团糟。
def lis():
#D = map(int, raw_input().split())
D = [3, 2, 6, 4, 5, 1]
L = [[] for i in range(len(D))]
L[0].append(D[0])
for i in range(len(D)):
for j in range(0,i):
if D[i] > D[j]:
L[i] = L[j]
L[i].append(D[i])
print L
返回结果:
[[3], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [2, 6, 4, 5], [1]]
它应该是什么:
[[3], [2], [2, 6], [2, 4], [2, 4, 5], [1]]
正如我在调试器中看到的那样:
L[i] = L[j]
不仅L[i]
获得新值,而且列表中的其他main (L)
列表也...
我不知道如何避免它。看起来 Python 中的列表与 C 系列的向量语言完全不同......
我和这个斗争了很长时间。巨大的啤酒给那些会发现问题的人:(