673. Number of Longest Increasing Subsequence
最长递增子序列的个数。
开始想着用回溯法去计算个数,后来发现实现有点困难,主要没有分情况讨论清晰。
第二点时,某一长度的自增子序列的个数也可以用一个状态方程表示,然后更新。
学到这两点。
class Solution {
public int findNumberOfLIS(int[] nums) {
if(nums.length<=1)
return nums.length;
int dp[]=new int[nums.length];
int cnt[]=new int[nums.length];
Arrays.fill(dp,1);
Arrays.fill(cnt,1);
int maxres=1;
int res=1;
for(int i=1;i<nums.length;i++){
for(int j=0;j<i;j++){
if(nums[i]>nums[j]){
if(dp[i]==dp[j]+1)
cnt[i]+=cnt[j];
else if(dp[i]<dp[j]+1){
dp[i]=dp[j]+1;
cnt[i]=cnt[j];
}
}
}
if(maxres==dp[i])
res+=cnt[i];
else if(maxres<dp[i]){
maxres=dp[i];
res=cnt[i];
}
}
return res;
}
}