Problem: 300. 最长递增子序列
41.最长上升子序列
给你一个整数数组 nums
,找到其中最长严格递增子序列的长度。
子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]
是数组 [0,3,1,6,2,2,7]
的子序列。
所以这道题目是求:严格递增子序列的长度。
示例 1:
输入: nums = [10,9,2,5,3,7,101,18]
输出: 4
解释: 最长递增子序列是[2,3,7,101]
,因此长度为 4 。
题解
dp数组含义:
dp[i]
表示以nums[i]
结尾的最长递增子序列
注意是以nums[i]
结尾,并不是nums[0...i]
的最长递增子序列,这两者区别非常大
初始化:
初始化为1 因为最小的递增序列就是num[i]
本身
递推公式:
如果当前数(cur)大于之前的某个数(pre) 那么他们可以构成递增子序列
但是可能当前的数(cur)比之前很多数都大(pres)
因为本题要求最长的递增子序列
所以我们也就去找pres中递增子序列最大的那个也就是对应的dp[pre]
1 | class Solution { |