最长上升子序列平常用都是用简单的动态规划进行:
递推公式如下:
时间复杂度为
而对于该问题,其实可以有nlogn复杂度的算法可以实现:
动态规划+二分法:
维护一个dp表用来记录,以dp[i]结尾的i+1长度下尾部数字最小的序列:
所以dp的实际数组长度就是我们所求的递增子序列的最大长度。
举个例子: 【10,9,2,5,3,7,21】
number数组:
10 | 9 | 2 | 5 | 3 | 7 | 21 |
<
最长上升子序列平常用都是用简单的动态规划进行:
时间复杂度为
而对于该问题,其实可以有nlogn复杂度的算法可以实现:
维护一个dp表用来记录,以dp[i]结尾的i+1长度下尾部数字最小的序列:
所以dp的实际数组长度就是我们所求的递增子序列的最大长度。
举个例子: 【10,9,2,5,3,7,21】
number数组:
10 | 9 | 2 | 5 | 3 | 7 | 21 |
<