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

发布于:2023-09-14 ⋅ 阅读:(111) ⋅ 点赞:(0)

小算法:

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

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

参考代码:

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

        int retcount=1;
        int retlen=1;

        //求最长递增子序列的长度并统计不同长度子序列的个数
        for(int i=1;i<n;i++)
        {
            for(int j=0;j<i;j++)
            {
                if(nums[j]<nums[i])
                {
                    if(len[j]+1==len[i])
                    {
                        count[i]+=count[j];
                    }
                    else if(len[j]+1>len[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;
    }
};


网站公告

今日签到

点亮在社区的每一天
去签到