Skip to content

673. Number Of Longest Increasing Subsequence

Array Dynamic Programming Binary Indexed Tree Segment Tree

Problem - Number Of Longest Increasing Subsequence

Medium

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.

Solutions

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution:
    def findNumberOfLIS(self, nums: List[int]) -> int:
        n = len(nums)
        dp = [1] * n
        count = [1] * n
        max_val = 0
        result = 0

        for i in range(n):
            for j in range(i):
                if nums[j] < nums[i]:
                    if dp[i] < (dp[j] + 1):
                        dp[i] = dp[j] + 1
                        count[i] = count[j]
                    elif dp[i] == (dp[j] + 1):
                        count[i] += count[j]
            if max_val < dp[i]:
                max_val = dp[i]
                result = count[i]
            elif max_val == dp[i]:
                result += count[i]

        return result

Submission Stats:

  • Runtime: 485 ms (59.90%)
  • Memory: 18 MB (63.84%)