76-最长上升子序列

题目:求一个无序数组中,最长上升子序列。子序列不一定是连续的。

def lengthOfLIS(nums):
    if len(nums)<1:
        return 0
    dp = [1]*len(nums)
    for i in range(len(nums)):
        for j in range(i):
            if nums[i]>nums[j]:
                dp[i] = max(dp[j]+1,dp[i])
    return max(dp)

  注:

使用动态规划的思想,状态方程为:dp[i] = max(dp[j]+1,dp[i])。即当前最长子序列为遍历之前所有元素,比当前元素小的元素的最长子序列的最大值加1。时间复杂度为O(nlog(n))。

posted @ 2019-08-22 21:03  尘世中一个迷途小书童  阅读(196)  评论(0编辑  收藏  举报