674.最长连续递增序列
题目描述
给定一个未经排序的整数数组,找到最长且连续递增的子序列,并返回该序列的长度。
连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], …, nums[r - 1], nums[r]] 就是连续递增子序列。
示例 1:
1 | 输入:nums = [1,3,5,4,7] |
示例 2:
1 | 输入:nums = [2,2,2,2,2] |
提示:
- 1 <= nums.length <= $10^4$
- -$10^9$ <= nums[i] <= $10^9$
暴力
鉴于题目的输入规模在 $10^4$,估计 O($n^2$) 大概在 $10^8$, 所以暴力算法是可以被接受的
所以很简单,只需要枚举所有的连续子序列即可
1 | /** |
每到一个新的数组元素,与前一个数组元素作比较,如果确实更大,那么将答案序列延长一位,将该元素假如答案序列数组,进行下个元素的比较
动态规划
定义 dp 数组为包含下标为 i 的元素,且截止到该元素的最长递增序列
故如果该元素大于该元素前面一个元素的值,那么可以在前面一个元素的答案上拼接到该元素,如果不大于,那么答案就是 1
最后筛选一下最大值就可以了
1 | // @lc code=start |
从 O($n^2$) 优化到 O(n)
建议看完立即去看 300 题,最长递增子序列
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 M2Y-Blog!

