关闭

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

标签: delete算法
1668人阅读 评论(0) 收藏 举报
分类:
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
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:76895次
    • 积分:1348
    • 等级:
    • 排名:千里之外
    • 原创:58篇
    • 转载:9篇
    • 译文:0篇
    • 评论:13条
    文章分类
    最新评论