
思路

- dp,LC300一样的。
dp[i]
表示以nums[i]
结尾的最长递增子序列的长度。
count[i]
表示长度为dp[i]
的以nums[i]
结尾的最长递增子序列有几个,因为来源可能有多个。如上图。
class Solution {
public int findNumberOfLIS(int[] nums) {
int[] dp = new int[nums.length];
int[] count = new int[nums.length];
int res = 0;
int max = 0;
for (int i = 0; i < nums.length; i++) {
dp[i] = 1;
count[i] = 1;
for (int j = 0; j < i; j++) {
if (nums[j] < nums[i]) {
if (dp[j] + 1 > dp[i]) {
dp[i] = dp[j] + 1;
count[i] = count[j];
} else if (dp[j] + 1 == dp[i]) {
count[i] = count[i] + count[j];
}
}
}
if (dp[i] > max) {
max = dp[i];
res = count[i];
} else if (dp[i] == max)
res += count[i];
}
}
return res;
}
}