LeetCode 673. Number of Longest Increasing Subsequence
2020-06-11 19:55:48
# leetcode
# core problems
Problem
LeetCode 673. Number of Longest Increasing Subsequence
1. 题目简述
给出一个未排序的整形数组,返回其最长递增系序列的数量。例如:
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].
Note:
数据规模不会超过2000且保证最终的解是32位整形数
2. 算法思路
相关问题:
和300题不同的是,这里我们需要返回的是数量,而不是长度,也就是说仅仅找出长度已经无法满足我们的需求,我们不仅需要记录长度,还需要记录数量。
另一种思路是使用segement tree,暂时还没学到那块,等学到了在回头看!!!
动态规划
我们需要记录的有两个数值,到当前数字截止的最长的递增子序列长度和数量。因此,这是一个二维dp问题。对于300题中的第二种解法我们可以抛弃了,因为它只能找出长度,而无法找到数量。
因此,我们记录一个二维dp数组,每一维数组都有两个值,一个是长度,一个是数量。
当我们向前一个个查找的时候,记录最长的递增子序列的数量。
时间复杂度为O(n ^ 2),因为每次都要去找前面所有的数字,很慢。
1 | class Solution { |