题目:求一个无序数组中,最长上升子序列。子序列不一定是连续的。
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))。