数组中最长递增子序列
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;
}
#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;
}
相关文章推荐
- 2.16 求数组中最长递增子序列
- 求数组中的最大子数组之和,最长递增子序列
- 编程之美-2.16-求数组中最长递增子序列
- 求数组中最长递增子序列
- 读书笔记之编程之美 - 2.16 求数组中最长递增子序列
- 求数组中最长递增子序列
- 编程之美2.16——求数组中最长递增子序列
- 数组中最长递增子序列问题研究(2)
- 求数组中最长递增子序列
- 求数组中最长递增子序列
- 《编程之美》读书笔记17: 2.16 求数组中最长递增子序列
- 编程之美2.16 求数组中最长递增子序列
- 编程之美2.16 求数组中最长递增子序列
- 2.16 求数组中最长递增子序列
- 求数组中最长递增子序列
- 求数组中最长连续递增子序列
- 编程之美_012求数组中最长递增子序列
- 数组最长递增子序列
- 2.16 求数组中最长递增子序列
- 程序员面试100题之十二:求数组中最长递增子序列