力扣错因:
if(dp[i]==dp[j]+1)
{
g[i]+=g[j];//错因写成g[I]++,我的理解是,g[i]个数应该多了一个,
//但这里可能有多个g[j]都是+1后为g[i]
}
第二个错因:最后取得最大长度的可能不止一个,需要全加起来
源代码:
class Solution {
public:
int findNumberOfLIS(vector<int>& nums) {
int n=nums.size();
int dp[n+1];
int g[n+1];
for(int i=0;i<n;i++)
{
dp[i]=1;
g[i]=1;
}
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(nums[i]>nums[j])
{
if(dp[i]<dp[j]+1)
{
dp[i]=dp[j]+1;
g[i]=g[j];
}
else if(dp[i]==dp[j]+1)
{
g[i]+=g[j];
}
}
}
}
int re=1;
for(int i=0;i<n;i++)
{
re=max(re,dp[i]);
}
int index=-1;
int rr=0;
for(int i=0;i<n;i++)
{
if(dp[i]==re)
{ index=i;
rr+=g[index];
}
}
return rr;
}
};