673. Number of Longest Increasing Subsequence

2020/12/19 leetcode 共 829 字,约 3 分钟

title

problem link

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)

Search

    Table of Contents