#leetcode673. 最长递增子序列的个数

    ID: 3098 传统题 1000ms 128MiB 尝试: 1 已通过: 1 难度: 3 上传者: 标签>树形数据结构树状数组线段树语言入门数组动态规划最长上升子序列

最长递增子序列的个数

题目描述

给定一个未排序的整数数组 nums,返回其中最长严格递增子序列的个数。

递增子序列不要求元素在原数组中连续,但必须保持原有的相对顺序,且相邻选取元素的值必须严格递增。

注意: 即使两个子序列的数值相同,只要选择的下标不同,也视为不同的子序列。

代码框架

本题使用 LeetCode 函数提交模式。请实现下方 Solution 类中的 findNumberOfLIS 函数,不需要编写 main() 函数,也不需要自行读取标准输入或输出结果。

class Solution {
public:
    int findNumberOfLIS(vector<int>& nums) {

    }
};

评测程序会自动将数据解析为 vector<int>,调用 Solution::findNumberOfLIS(nums) 并验证返回值。

输入格式

一行,表示 LeetCode 格式的整数数组 nums,保留方括号 [] 和逗号 ,,例如:

[1,3,5,4,7]

请注意: 此处的输入格式仅为评测数据的存储格式。使用上述代码框架提交时,不需要手动解析输入。

输出格式

一行一个整数,表示最长严格递增子序列的个数,即函数的返回值。

使用上述代码框架提交时,不需要自行打印答案。

输入输出样例 #1

输入 #1

[1,3,5,4,7]

输出 #1

2

说明 #1

最长递增子序列有 [1,3,4,7] 与 [1,3,5,7],因此答案为 2。

输入输出样例 #2

输入 #2

[2,2,2,2,2]

输出 #2

5

说明 #2

最长严格递增子序列的长度为 1,每个位置都构成一个不同的长度为 1 的子序列,故答案为 5。

数据范围

  • 1 <= nums.length <= 2000
  • -10^6 <= nums[i] <= 10^6
  • 答案保证在 32 位有符号整数范围内。

提交要求

  • 使用 C++14,只提交 class Solution 的完整实现。
  • 不要添加 main() 函数。
  • 不需要使用 cin、scanf、cout 或 printf。
  • 题目按原 LeetCode 函数签名评测,不是传统 ACM 输入输出模式。

原题:LeetCode 673. 最长递增子序列的个数