最长上升子序列

求一个序列的最长上升子序列长度可以通过动态规划求解。动态规划的思想是将一个问题分成多个阶段,每一阶段的解依靠其之前阶段的解推出。按照动态规划的思想,在求解序列[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
posted @ 2021-01-20 22:31  Bill_H  阅读(108)  评论(0编辑  收藏  举报