力扣 -- 673. 最长递增子序列的个数

力扣 -- 673. 最长递增子序列的个数_第1张图片

小算法:

通过一次遍历找到数组中最大值出现的次数:

力扣 -- 673. 最长递增子序列的个数_第2张图片

利用这个小算法求解这道题就会非常简单了。

力扣 -- 673. 最长递增子序列的个数_第3张图片

力扣 -- 673. 最长递增子序列的个数_第4张图片

力扣 -- 673. 最长递增子序列的个数_第5张图片

参考代码:

class Solution {
public:
    int findNumberOfLIS(vector& nums) {
        int n=nums.size();
        vector len(n,1);
        auto count=len;

        int retcount=1;
        int retlen=1;

        //求最长递增子序列的长度并统计不同长度子序列的个数
        for(int i=1;ilen[i])
                    {
                        count[i]=count[j];
                        len[i]=len[j]+1;
                    }
                }
            }
            //统计最长递增子序列出现的个数
            if(len[i]>retlen)
            {
                retcount=count[i];
                retlen=len[i];
            }
            else if(len[i]==retlen)
            {
                retcount+=count[i];
            }
        }
        return retcount;
    }
};

你可能感兴趣的:(力扣动态规划,力扣经典面试题,leetcode,算法,数据结构,c++,c语言,动态规划,贪心算法)