最长上升子序列平常用都是用简单的动态规划进行:
递推公式如下:

时间复杂度为
而对于该问题,其实可以有nlogn复杂度的算法可以实现:
动态规划+二分法:
维护一个dp表用来记录,以dp[i]结尾的i+1长度下尾部数字最小的序列:
所以dp的实际数组长度就是我们所求的递增子序列的最大长度。
举个例子: 【10,9,2,5,3,7,21】
number数组:
| 10 | 9 | 2 | 5 | 3 | 7 | 21 |
dp数组:
本文介绍了如何使用动态规划结合二分查找实现最长上升子序列问题的nlogn复杂度解决方案。通过维护一个dp表记录以特定数值结尾的最长递增子序列,利用二分查找提高更新dp表的效率。通过举例和代码展示了解决过程。
最长上升子序列平常用都是用简单的动态规划进行:

时间复杂度为
而对于该问题,其实可以有nlogn复杂度的算法可以实现:
维护一个dp表用来记录,以dp[i]结尾的i+1长度下尾部数字最小的序列:
所以dp的实际数组长度就是我们所求的递增子序列的最大长度。
举个例子: 【10,9,2,5,3,7,21】
number数组:
| 10 | 9 | 2 | 5 | 3 | 7 | 21 |
dp数组:

被折叠的 条评论
为什么被折叠?