您的位置:首页 > 其它

数组中最长递增子序列

2010-07-12 10:49 204 查看
这道题还有优化的解法:保留一个动态规划优化矩阵,里面保留每次最长子序列的终点。

#include<iostream>
#include<vector>

using namespace std;

int Max(int *a, int n)
{
int max = a[0];
for(int i = 1; i < n; i++)
if(max < a[i])
max = a[i];
return max;
}
int LIS(vector<int> &array)
{
int *a = new int[array.size()];
for(int i = 0; i < array.size(); i++)
{
a[i] = 1; //初始化默认的长度
for(int j = 0; j < i; j++) //前面最长的序列
{
if(array [i] > array [j] && a[j] + 1 > a[i])
{
a[i] = a[j] + 1;
}
}
}
return Max(a, array.size());
}

int main(void)
{
vector<int>vec;

vec.push_back(1);
vec.push_back(-1);
vec.push_back(2);
vec.push_back(-3);
vec.push_back(4);
vec.push_back(-5);
vec.push_back(6);
vec.push_back(-7);

int max=LIS(vec);
cout<<max<<endl;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: