编程之美 最长递增子序列 LIS

1. O(N*logN) 解法

先对序列排序, 然后寻找两个序列的最长公共子序列

2. O(N*N) 的动态规划解法

令 LIST[i] 表示以 i 为结尾的最长子序列的长度, 那么 LIST[J] = MAX(LIST[I]+1), J > I

3. O(N*logN) 的动态规划解法 (需要 O(N) 的空间复杂度)

设置一个数组 B[], 记录 B[] 记录长度为 i 的 LIS 的末尾元素, 向 B 中插入数据使用二分插入, 即可实现 N*logN 的时间复杂度

方法很是奇妙

原文地址:https://www.cnblogs.com/xinsheng/p/3481884.html