leetcode_673

Given an unsorted array of integers, find the number of longest increasing subsequence.

Example 1:

Input: [1,3,5,4,7]
Output: 2
Explanation: The two longest increasing subsequence are [1, 3, 4, 7] and [1, 3, 5, 7].

Example 2:

Input: [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.

Note: Length of the given array will be not exceed 2000 and the answer is guaranteed to be fit in 32-bit signed int.

Solutions

  1. dynamic programming O(n2)

  2. Add another dp table to record the number of longest increasing subsequences ending with each position based on the solution in problem 300.

  1. interval tree O(nlog(n))

  2. binary search O(n(log(n)))

  3. Based on the binary search method described in problem 300

  4. Internally, this method will record the whole process while updating the lcs sequence using binary search, further more, it will also assign a count value to each number, representing the count of lcs ending with nums >= cur.

    • To improve the counting complexity from O(n) to O(log(n)), use both binary search and prefix-sum.

or tuple maxlen and cnt into a pair.

  1. binary index tree O(nlog(n))

Last updated

Was this helpful?