问题描述
给出一个没有排序的整数数组,找出最长递增子序列的长度。
解决方案
- DP动态规划方法
python版实现,复杂度O(n^2)。状态数组d[i]表示数组前i个数的最大递增子序列长度。转移公式为:
d[i] = max(d[j]+1, d[i])
class Solution(object):
def lengthOfLIS(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
maxlen = 0
d = [1]*len(nums)
for i in range(len(nums)):
for j in range(i):
if nums[j] < nums[i] and d[j] + 1 > d[i]:
d[i] = d[j] + 1
if d[i] > maxlen:
maxlen = d[i]
return maxlen