满意答案
dfjordan23
2017.10.23
采纳率:55% 等级:10
已帮助:466人
算法导论15.4-5 请给出一个O(n^2)时间的算法,使之能找出一个n个数的序列中最长的单调递增子序列。
这个题目是在动态规划部分,此处显然是要用到动态规划。
我们知道可以使用动态规划思想的问题的的两个重要的特征是具有最优子结构和重叠子问题。下面就来分析一下这个问题:
对于一个n个元素的序列nums,设其最长单调递增子序列为Sm(n)(m为递增子序列的长度),则对于Sm存在两种情况:
1、如果nums[n]比Sm-1的最后一个元素大,则Sm由Sm-1加nums[n]组成
2、如果nums[n]小于等于Sm-1的最后一个元素,则Sm即为Sm-1
但是这样考虑有问题,因为如果Sm-1的序列有多个,我们则应该每一个都与nums[n]考察,如果nums[n]比所有Sm-1的尾元素都小或相等,而Sm-2的序列中又存在尾元素小于nums[n]的序列,则我们应该如何选择&