求一个数组的最长递减子序列

原创 2012年03月27日 19:42:45
47.创新工场(算法):
求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}

#include<iostream>
#include<cassert>
#include<stack>
using namespace std ;
int BiSearch(int *A,int nTarget,int nLen);
void FindLongestSequence(int *A,int nLen)
{
	int *index=new int[nLen];
	int *LDS=new int[nLen];
	index[0]=A[0];
	LDS[0]=1;
	int indexLen=1;
	for (int i=1;i<nLen;i++)
	{
		int pos=BiSearch(index,A[i],indexLen);
		index[pos]=A[i];
		LDS[i]=pos+1;
		if(pos>=indexLen)
			indexLen++;
	}
	int ResultLen=indexLen;
	for (i=nLen;i>=0;i--)
	{
		if(LDS[i]==ResultLen)
		{	
			index[ResultLen-1]=A[i];
			ResultLen--;
		}		
	}

	for (i=0;i<indexLen;i++)
	{
		cout<<index[i]<<" ";
	}
	delete []index;

}
int BiSearch(int *A,int nTarget,int nLen)
{
	assert(A!=NULL&&nLen>0);
	int start=0;
	int end=nLen-1;
	while (start<=end)
	{
		int mid=(start+end)/2;
		if(nTarget>A[mid])
			end=mid-1;
		else if(nTarget<A[mid])
			start=mid+1;
		else
			return mid;
	}
	return start;
}
int main()
{
	int A[]={9,4,3,2,5,4,3,2,77,76};
	int nLen=sizeof(A)/sizeof(int);
	FindLongestSequence(A,nLen);
	return 1;
}




参考:http://apps.hi.baidu.com/share/detail/31988401

求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5, 4,3,2}

代码如下: public class Decrease { /** * @param PLA * */ /*算法描述: * 用动态规划解决此问题,设A为原数组,另设数组B(大...
  • Army_War
  • Army_War
  • 2014年07月28日 19:52
  • 1485

算法 - 求一个数组的最长递减子序列(C++)

//**************************************************************************************************...
  • chimomo
  • chimomo
  • 2014年04月18日 11:29
  • 10200

动态规划--寻找最长递减子序列

昨天C++课上留了三道题,做出来平时
  • u011714944
  • u011714944
  • 2014年05月31日 13:52
  • 1078

编程之美2.16求数组中最长递增子序列Java版

解法三还没写 /* * To change this license header, choose License Headers in Project Properties. * To cha...
  • TT285955925
  • TT285955925
  • 2016年07月01日 21:21
  • 1459

动态规划求最长连续递增子串

最长递增子序列问题是一个很基本、较常见的小问题,但这个问题的求解方法却并不那么显而易见,需要较深入的思考和较好的算法素养才能得出良好的算法。由于这个问题能运用学过的基本的算法分析和设计的方法与思想,能...
  • guoxinian
  • guoxinian
  • 2016年10月20日 17:20
  • 2300

求整数数组中的最长递增子序列长度

昨天在复习软考的时候发现了这样的一个算法,有些地方确实经过一番推敲才搞懂,今天来整理记录一下~ 动态规划通常用来求解最优化问题,在这类问题中,我们通过做出一组选择来达到最优解。在做出每个选择的同时,通...
  • u012421436
  • u012421436
  • 2015年10月25日 14:03
  • 877

求一个数组的最长递减子序列

网上的,忘记来自哪里了,欢迎认领。 记下以后看。 #include using namespace std; //3,2,4,1,10,0,9,8,7,6,5,-1,9 //函数功...
  • faral
  • faral
  • 2013年12月06日 22:44
  • 515

求数组中最长递增子序列

编程之美有一道关于数组中最长递增子序列,题目如下: 写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中最长递增子序列的长度。 例如在序列1,-1,2,-3,4,-5,6,-7中,...
  • xuguoli_beyondboy
  • xuguoli_beyondboy
  • 2015年09月07日 16:43
  • 1218

用后缀数组求两个字符串的最长公共子串

对于两个字符串,不好直接运用后缀数组,所以我们可以把两个子串串中间用一个在字符串中不会出现的字符连接起 来,比如'$‘,计算后缀数组,检查后缀数组中所有相邻后缀。分属于两个字符串的后缀的lcp的最大值...
  • u013008291
  • u013008291
  • 2015年08月30日 17:28
  • 1956

找出二维数组中的最长路径(最长链表)

一个二维数组 比如 1    2    3    4  5 16 17 18 19  6 15 24 25 20  7 14 23 22 21  8 13 12 11 10  9 找出其中的最长路径,...
  • iamxiaoguizi
  • iamxiaoguizi
  • 2016年04月13日 21:06
  • 1076
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:求一个数组的最长递减子序列
举报原因:
原因补充:

(最多只允许输入30个字)