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.
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])