一、题目
二、思路
1、动态规划,在求出最长递增子序列个数的基础上,找到具体的值
2、先求出长度
3、找到dp[i]等于当前长度的值,添加到输出容器
三、代码
class Solution {
public:
/**
* retrun the longest increasing subsequence
* @param arr int整型vector the array
* @return int整型vector
*/
vector<int> LIS(vector<int>& arr) {
int size=arr.size();
vector<int>dp(size,1);
int MaxNum=1;
for(int i=1;i<size;++i){
for(int j=0;j<i;++j){
if(arr[i]>arr[j]){
dp[i]=max(dp[i],dp[j]+1);
}
}
MaxNum=max(MaxNum,dp[i]);
}
//上面找出长度
//下面开始找到具体的值
vector<int>res(MaxNum);
for(int i=size-1,j=MaxNum;j>0;--i){
if(dp[i]==j){
res[--j]=arr[i];
}
}
return res;
}
};