测试代码
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;
int LIS(const int*array, int length, int* pre, int &nIndex) {
int* longest = new int[length];
for (int i = 0; i < length; i++) {
longest[i] = 1;
pre[i] = -1;
}
int nLis = 1;
for (int i = 0; i < length; i++) {
for (int j = 0; j < i; j++) {
if (array[j] <= array[i]) {
if (longest[i] < longest[j] + 1) {
longest[i] = longest[j] + 1;
pre[i] = j;
}
}
}
if (nLis < longest[i]) {
nLis = longest[i];
nIndex = i;
}
}
delete[] longest;
return nLis;
}
void GetLis(const int* array, const int* pre,vector<int>&lis,int nIndex) {
while (nIndex >= 0)
{
lis.push_back(array[nIndex]);
nIndex = pre[nIndex];
}
reverse(lis.begin(), lis.end());
}
void Print(int *head,int size) {
for (int i = 0; i < size; i++)
cout << head[i] << " ";
cout << endl;
}
int main()
{
int array[] = {23,56,43,12,78,4,9,10,68,42};
int size = sizeof(array) / sizeof(int);
int *pre = new int[size];
int nIndex;
int max = LIS(array, size, pre, nIndex);
vector<int> lis;
GetLis(array, pre, lis, nIndex);
Print(array, size);
cout << "最大长度: " << max << endl;
Print(&lis.front(),lis.size());
delete[] pre;
system("pause");
return 0;
}
测试结果