title
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
solution
class Solution:
def findNumberOfLIS(self, nums: List[int]) -> int:
if not nums:
return 0
N = len(nums)
lengths = [1] * (N)
count = [1] * (N)
for i, v in enumerate(nums):
for j in range(i):
if v > nums[j]:
if lengths[i] < lengths[j] + 1:
lengths[i] = lengths[j] + 1
count[i] = count[j]
elif lengths[i] == lengths[j] + 1:
count[i] += count[j]
max_len = max(lengths)
return sum(c for i, c in enumerate(count) if lengths[i] == max_len)