求一个序列的最长上升子序列长度可以通过动态规划求解。动态规划的思想是将一个问题分成多个阶段,每一阶段的解依靠其之前阶段的解推出。按照动态规划的思想,在求解序列[2, 5, 1, 5, 4, 5]的最长上升子序列时,可以将问题分解为:
以2为结尾的序列[2]的最长上升子序列长度,
以5为结尾的序列[2, 5]的最长上升子序列长度,
以1为结尾的序列[2, 5, 1]的最长上升子序列长度
... ...
求解代码如下
def sub_array(array):
sub = len(array)*[1]
for i in range(len(array)):
for j in range(i):
if array[i]>array[j]:
sub[i] = max(sub[i],sub[j]+1)
return max(sub)
运行代码
>>> sub_array([2, 5, 1, 5, 4, 5])
3