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
dynamic programming O(n2)
Add another
dp tableto record thenumberof longest increasing subsequences ending with each position based on the solution inproblem 300.
interval tree O(nlog(n))
binary search O(n(log(n)))
Based on the binary search method described in
problem 300Internally, 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.
binary index tree O(nlog(n))
Last updated
Was this helpful?