创新工场:
求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
------------------------------------------------------
这题参见上面这篇博客的动态规划的方法,可以迅速解出,
同时也可以利用回溯遍历出符合的答案,这里需要一个记忆变量
下面分别简单介绍下:
方法一:动态规划
主要是得出递推关系式
我们每考虑下一个元素,是希望这个元素能够紧跟比他大的元素之后,这样序列能够达到最长
所以有如下关系
f(n) = maxf(i)+1 if a[n]>a[i] i
所以我们需要另外一个数组记录这个次数
而如何知道它相连的上一个元素呢?这里还需要再借助一个数组记录这个i
下面给出代码,我这里输出反了,这个大家稍作修改即可
void FindLongestDSCArray2(int *arr, int n){
int *mark = new int[n];
int *link = new int[n];
int i = 0;
for(i=0;i
mark[i] = 0;
link[i] = -1;
}
//link[0] = 1;
int j = 0, maxMark = 0;</