给定一个无序的整数数组找到其中最长上升子序列的长度。
解释: 最长的上升子序列是 [2,3,7,101]它的长度是 4。
说明:可能会有多种最长上升子序列的组合你只需要输出对应的长喥即可。
你算法的时间复杂度应该为 O(n2)
进阶: 你能将算法的时间复杂度降低到 O(n log n) 吗?
1、子序列:不要求连续,只要保证元素前后顺序一致即可;
2、上升:这里的“上升”是“严格上升”元素不能相等;
遍历到索引是 i
的数的时候,我们应该把索引是 [0, ... ,i - 1]
的 DP数组(序列长度)都看一遍如果當前的数 nums[i]
大于之前的某个数,那么 nums[i]
就可以接在这个数后面形成一个更长的序列 把前面的 i 个数都看了,
i对应的最长序列即比当前数nums[i]
要小的那些序列长里找最大的,然后加 1
双重遍历,时间复杂度为
妈耶差点就看不懂答案了,哭
这里创建维护一个DP数组,定义为:下标i表礻序列长为i+1的序列dp[i]表示这个长度的序列的最小尾数。
比第一种方法快了30倍
腾讯视频VIP新春特惠 88元开通1年腾讯視频会员送1800V力值
本文活动登录微视APP立减5元和腾讯视频极速版APP还可以立减5元
88元可以开通1年腾讯视频会员送880积分和1800V力值 如果有需要续费的可以購买