给定一个未排序的整数数组,找到最长递增子序列的个数。
示例 1:
输入: [1,3,5,4,7]
输出: 2
解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。
示例 2:
输入: [2,2,2,2,2]
输出: 5
解释: 最长递增子序列的长度是1,并且存在5个子序列的长度为1,因此输出5。
注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数。
解题报告:跟 一般的最长递增子序列解题思路相同,我这里并没有 用O(nlogn)的复杂度(我是垃圾)
定义两个状态 dp1[i]: 以 nums[i] 结尾的最长 递增子序列的长度
dp2[i]: 以 dp1[i] 长度的最长递增子序列的个数。
状态转移方程 : dp1[i] = max(dp1[i],dp1[j]+1) s.t. nums[j] < nums[i]
dp2[i] = dp2[i]+dp2[j] if dp1[j]+1==dp1[i]
dp2[j] if dp1[j]+1>dp1[i]
初始化 dp1,dp2 全部初始化为 1