我刚刚编写了这个实现来找出使用动态编程的最长递增子序列的长度。因此,对于输入为 [10, 22, 9, 33, 21, 50, 41, 60, 80],LIS 为 6,其中一个为 [10, 22, 33, 50, 60, 80]。
当我运行以下代码时,我得到的正确答案为 6,复杂度为 O(n)。这是对的吗?
def lis(a):
dp_lis = []
curr_index = 0
prev_index = 0
for i in range(len(a)):
prev_index = curr_index
curr_index = i
print 'if: %d < %d and %d < %d' % (prev_index, curr_index, a[prev_index], a[curr_index])
if prev_index < curr_index and a[prev_index] < a[curr_index]:
print '\tadd ELEMENT: ', a[curr_index]
new_lis = 1 + max(dp_lis)
dp_lis.append(new_lis)
else:
print '\telse ELEMENT: ', a[curr_index]
dp_lis.append(1)
print "DP LIST: ", dp_lis
return max(dp_lis)
if __name__ == '__main__':
a = [10, 22, 9, 33, 21, 50, 41, 60, 80]
print lis(a)