/**
* 求一个数组的最长递减子序列
*输入:9,4,3,2,5,4,3,2
*输出:9,5,4,3,2
**/
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct state
{
int index_pre; //存储当前值的前一个值的位置
int length; //存储到当前位置的长度
state()
:index_pre(-1)
,length(0)
{
}
};
int* get_lds(int* arr,int size,int& length)
{
if(size==0 || arr==nullptr)
return nullptr;
state* st=new state[size];
int last_pos; //存储最长的结束位置
int last_long=-1; //存储至今的最长串
for(int i=0;i<size;++i)
{
int cur_length=1; //存储当前最长
int cur_pre=-1; //存储上一个位置
for(int j=0;j<i;++j)
{
if(arr[i]<arr[j] && cur_length<st[j].length+1)
{
cur_pre=j;
cur_length=st[j].length+1;
}
}
st[i].length=cur_length;
st[i].index_pre=cur_pre;
if(cur_length>last_long) //存储至今最长
{
last_long=cur_length;
last_pos=i;
}
}
//cout<<st[last_pos].length<<endl;
length=st[last_pos].length;
int *result=new int[st[last_pos].lengt
最长递减子序列
最新推荐文章于 2023-10-27 19:24:16 发布