Problem Link

Description


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 the longest increasing subsequence is 1, and there are 5 increasing subsequences of length 1, so output 5.

Β 

Constraints:

  • 1 <= nums.length <= 2000
  • -106 <= nums[i] <= 106
  • The answer is guaranteed to fit inside a 32-bit integer.

Solution


Python3

class Solution:
    def findNumberOfLIS(self, nums: List[int]) -> int:
        N = len(nums)
 
        dp = [1] * N
        count = [1] * N
        maxLength = 1
 
        for i in range(1, N):
            for j in range(i):
                if nums[i] > nums[j]:
                    if dp[j] + 1 > dp[i]:
                        dp[i] = dp[j] + 1
                        count[i] = count[j]
                    elif dp[j] + 1 == dp[i]:
                        count[i] += count[j]
 
            maxLength = max(maxLength, dp[i])
        
        return sum(count[i] for i in range(N) if dp[i] == maxLength)