最长递增(减)子序列【LIS】三种解法
问题:
给定一个序列data[]={1, 6, 2, 5, 7, 9}求出他的的最长递增子序列,容易看出为{1, 2, 5, 7, 9},长度为5.同时这种问题还有一些衍生问法如:最长非递增(减)增子序列,最长递减子序列等解法都是一样的理解后改变一下条件就行了。
解法一:动态规划法(O(n^2))
动态规划法需要一个数组来保存每一个元素前LIS的长度,设长度为N的序列为{a0,a1, a2, …an-1),则假定以aj结尾的数组序列的LIS长度为L(j),则状态转移方程为:
l[i]={
l[j]+1 if l[j]<l[i]&&Xj<Xi