跳转至

673.最长递增子序列的个数 (Medium)*

题目描述*

给定一个未排序的整数数组,找到最长递增子序列的个数。

示例*

输入: [1,3,5,4,7]

输出: 2

输入: [2,2,2,2,2]

输出: 5

注意*

给定的数组长度不超过 2000 并且结果一定是32位有符号整数。

代码*

之前已经求过最长递增子序列长度,这个不仅要求最长递增子序列长度,还要统计个数,需要另外记录。

class Solution {
public:
    int findNumberOfLIS(vector<int>& nums) {
        int len = nums.size();
        vector<int> dp(len, 1);
        vector<int> cnt(len, 1);
        int res = 1;
        for(int i = 1; i < len; i++) {
            for(int j = 0; j < i; j++) {
                if(nums[i] > nums[j]) {
                    if(dp[i] < dp[j] + 1) {
                        dp[i] = dp[j] + 1;
                        cnt[i] = cnt[j];
                    }else if(dp[i] == dp[j] + 1) {
                        cnt[i] += cnt[j];
                    }
                }
            }
            res = max(dp[i], res);
        }
        int count = 0;
        for(int i = 0; i < len; i++) {
            if(dp[i] == res) {
                count += cnt[i];
            }
        }
        return count;
    }
};

最后更新: July 23, 2022