class Solution {
public:
/**
* retrun the longest increasing subsequence
* @param arr int整型vector the array
* @return int整型vector
*/
vector<int> LIS(vector<int>& arr) {
// write code here
vector<int>dp(arr.size(),1);
int maxn = 0, n = arr.size();
for(int i = 1; i < n; i++){
//找到满足 j < i,arr[j] < arr[i],的最大dp[j]进行转移
for(int j = 0; j < i; j++){
if(arr[i] > arr[j]){
dp[i] = max(dp[i],dp[j]+1);
}
}
maxn = max(maxn, dp[i]);//找到最大长度
}
vector<int>ans(maxn);
for(int i = n-1, j = maxn; i > 0,j > 0; i--){
//逆向找到第一个满足所需大小的数
if(dp[i] == j){
ans[--j] = arr[i];//填入后继续寻找下一个数
}
}
return ans;
}
};