原题描述[题目链接][https://leetcode-cn.com/problems/longest-increasing-subsequence/]
给定一个无序的整数数组,找到其中最长上升子序列的长度。
示例:
1 | 输入: [10,9,2,5,3,7,101,18] |
说明:
- 可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。
- 你算法的时间复杂度应该为 O(n2) 。
进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?
算法描述
另开一个数组dp
,用于存放当前节点的最长上升子序列,遍历所给的数组,遍历过程中更新dp数组;如果满足nums[i]>nums[j]
更新,即dp[i] = max(dp[i],dp[j]+1)
;遍历下一个节点遍历前更新最长子序列的长度;m = max(m,dp[i])
,最后返回结果m
,即可;
C++代码
1 | class Solution { |
Java代码
1 | class Solution { |