xiximayou

动态规划--最长上升子序列(LIS)的长度

l例如:对于[3,1,4,2,5],最长上升子序列的长度是3

arr = [3,1,4,5,9,2,6,5,0]
def lis(arr):
    #dp[i]表示第i个位置的值为尾的数组的最长递增子序列的长度
    #初始化数组,假定数组中每个值的最长子序列就是它自己,即都是1
    dp = [1 for _ in range(len(arr))]
    #遍历数组
    for i in range(len(arr)):
        #当遍历到第i个位置时,再依次从0开始遍历到
        for j in range(i):
            #如果第i个位置的值比第j个位置的值要大,那么长度就是max(dp[j]+1,dp[i])
            if arr[i]>arr[j]:
                dp[i]=max(dp[i],dp[j]+1)
    return dp

最后输出dp:

[1,1,2,3,4,2,4,3,1]

分类:

技术点:

相关文章:

  • 2021-08-12
  • 2021-03-26
  • 2021-12-21
  • 2021-08-19
  • 2022-12-23
猜你喜欢
  • 2021-06-17
  • 2022-01-12
  • 2021-09-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-08-12
相关资源
相似解决方案