小算法:
通过一次遍历找到数组中最大值出现的次数:
利用这个小算法求解这道题就会非常简单了。
参考代码:
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;
}
};