Skip to main content

Number of Longest Increasing Subsequence

Problem Statement

Given an integer array nums, return the number of longest increasing subsequences.

Notice that the sequence has to be strictly increasing.

Leetcode Link

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

Code

Python Code
class Solution:
def findNumberOfLIS(nums):
# dp solution, 2 arrays
# length[i] stores the longest length ending at nums[i]
# count[i] counts the number of paths with length length[i]

if not nums:
return 0

n = len(nums)
length = [1] * n
count = [1] * n

for i in range(1, n):
for j in range(i):
if nums[i] > nums[j]:
# length[i] = max(length[j]+1, length[i])
# but we need to compute count also
if length[i] == length[j]:
length[i] = length[j]+1
count[i] = count[j]
elif length[i] == length[j]+1:
count[i] += count[j]

maxLength = max(length)
return sum([count[i] for i in range(n) if length[i] == maxLength])