求一个数组的最长递减子序列
来源:互联网 发布:linuxssh端口号配置 编辑:程序博客网 时间:2024/05/14 07:57
47.创新工场(算法):
求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
<pre class="cpp" name="code">#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;
}
</pre><br>
<br>
<pre></pre>
<br>
参考:http://apps.hi.baidu.com/share/detail/31988401
- 求一个数组的最长递减子序列
- 求一个数组的最长递减子序列
- 求一个数组的最长递减子序列
- 求一个数组的最长递减子序列
- 求一个数组的最长递减子序列
- 求一个数组的最长递减子序列
- 求数组的最长递减子序列
- 求一个整数数组最长递减子序列
- coding - 求数组的最长递减子序列
- 计蒜客-求数组的最长递减子序列
- 求数组的最长递减子序列 (dp)
- 算法 - 求一个数组的最长递减子序列(C++)
- 数据结构——算法之(025)( 求一个数组的最长递减子序列)
- 47.创新工场: 求一个数组的最长递减子序列
- 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
- 求一个数组的最长递减子序列比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5, 4,3,2}
- 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}
- 求一个数组的最长递减子序列 比如{9,4,3,2,5,4,3,2}的最长递减子序列为{9,5,4,3,2}。
- 你要找到黑夜里代替阳光的东西,那个叫做信念
- C++面向对象三大特性
- VS2010中SkinMagic 用法
- 关于c++模板的一些东西
- Spider Studio 数据挖掘集成开发环境
- 求一个数组的最长递减子序列
- source改变当前路径
- 配置maven-compiler-plugin
- 英语巧应用:介词
- eclipse快捷键
- 工作心得总结
- 成功演讲的3 个技巧
- Accelerated C++ Exercise 6-2
- (Relax 数论1.8)POJ 1284 Primitive Roots(欧拉函数的应用: 以n为模的本原根的个数phi(n-1))