Given an integer array nums, return the number of longest increasing subsequences.
Notice that the sequence has to be strictly increasing.
Example 1:
**Input:** nums = [1,3,5,4,7]
**Output:** 2
**Explanation:** The two longest increasing subsequences are [1, 3, 4, 7] and [1, 3, 5, 7].
Example 2:
**Input:** nums = [2,2,2,2,2]
**Output:** 5
**Explanation:** The length of longest continuous increasing subsequence is 1, and there are 5 subsequences' length is 1, so output 5.
Constraints:
1 <= nums.length <= 2000
-106 <= nums[i] <= 106
ac
classSolution {publicintfindNumberOfLIS(int[] nums) {// edge casesint maxLen =0, maxCnt =0, n =nums.length;int[] dp =newint[n];int[] cnt =newint[n];Arrays.fill(dp,1);Arrays.fill(cnt,1);for (int i =1; i < n; i++) {for (int j = i -1; j >=0; j--) {if (nums[j] >= nums[i]) continue; // skip, find smaller oneint len = dp[j] +1;if (len > dp[i]) { dp[i] = len; cnt[i] = cnt[j]; } elseif (len == dp[i]) { cnt[i] += cnt[j]; } } }for (int i =0; i <dp.length; i++) {if (dp[i] > maxLen) { maxLen = dp[i]; maxCnt = cnt[i]; } elseif (dp[i] == maxLen) { maxCnt += cnt[i]; } }return maxCnt; }}/*2 pass, int[] dp + int[] cnt, get length of each index, get maxLen from dp[]*/