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