具体思想:
相当于求最长不连续递增序列的升级版本;
需要额外数组来计数;
但是目前还没看树状数组问题,后续再总结;
具体代码:
class Solution {
public:
int findNumberOfLIS(vector<int>& nums) {
vector<int>dp(nums.size(),1);
vector<int>record(nums.size(),0);
record[0]=1;
int ret=0;
int maxn=1;
for(int i=1;i<nums.size();i++){
map<int,vector<int>>mp;
for(int j=0;j<i;j++){
if(nums[j]<nums[i]){
mp[dp[j]].push_back(j);
}
}
if(mp.empty()){
dp[i]=1;
record[i]=1;
continue;
}
auto it=mp.rbegin();
dp[i]=it->first+1;
for(auto ele:it->second){
record[i]+=record[ele];
}
maxn=max(maxn,dp[i]);
}
for(int i=0;i<dp.size();i++){
if(dp[i]==maxn){
ret+=record[i];
}
}
return ret;
}
};