最近群里有些同学在准备找工作,讨论了笔试、面试以及一些算法题,有些探讨勾起了我的一些回忆,这里跟大家分享两道DP题。
---------------------------------------------------------
第一题:
给定一个整数序列A={a1,a2,...,an},求它的最长递增子序列。比如,A={1,2,6,4,5}的最长递增子序列为{1,2,4,5},长度为4.
背景:最长递归子序列问题应该算是DP的一个比较经典的应用了。
解法一:
直接DP硬搞,时间复杂度O(n^2)
解法一思路:
创建标记数组f,令f[i]表示以第i个序列元素ai结尾的最长递增子序列的长度。
状态转移方程如下:f[i] = max{f[j]}+1 where a[j]<a[i]