最后更新于
最后更新于
给定一个未排序的整数数组,找到最长递增子序列的个数。
示例 1:
示例 2:
注意: 给定的数组长度不超过 2000 并且结果一定是32位有符号整数。
以为基础, 对于位置i
,我们不仅要维护以nums[i]
结尾的最长递增序列的长度length[i]
, 还要知道改最长序列所有可能的数量count[i]
.
对于i
后的位置j
, 如果有nums[i] < nums[j]
, 则nums[j]
可以组成新的上升序列. 还是从0
到j - 1
遍历所有位置, 判断nums[j]
是否更大. length[j]
的取其中的最大, count[j]
则记录这个最大值对应的可能组合的累计, 如果遍历过程中遇到了更长的上升子序列, 更新length[j]
的同时, count[j]
重置为对应的产生更大序列的count[i]
, 重新计数.
中的贪心+二分方法, 使用一个长度为最终最长递增子序列长度的数组, 记录了每个长度对应的所有递增子序列中, 末尾数字的最小值. 本题中, 还是使用这种套路, 但记录的内容更复杂了. 详情参考上面的题解答案.