题目
求最长上升子序列(不要求连续)
思路
动态规划
状态:
取第 i 个元素的条件下,得到的最长上升子序列长度
状态转移:
dp[i] = max(dp[0]…dp[j]…dp[i-1]) + 1 且满足 nums[j] < nums[i]
两重循环,遍历数组,遍历当前元素之前的所有dp值
初始化为1,因为如果是递减序列,结果是1
返回值是所有dp值里最大的
代码
class Solution:
def lengthOfLIS(self, nums: List[int]) -> int:
if nums == []:
return 0
memo = [1]*len(nums)
for i,n in enumerate(nums):
for j in range(i):
if nums[j] < n:
memo[i] = max(memo[i], 1+memo[j])
return max(memo)