不说别的了,自己太废了,啥都不想学,也不会写,这个是在网上搜到的教程
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,len;
if(arr.empty()) return dp;
const int inf = 1e9+10;
dp.push_back(inf);
int mx=0;
for(int i=0;i<arr.size();i++) {
if(arr[i]>dp.back()) {
dp.push_back(arr[i]);
len.push_back(dp.size());
} else if(arr[i]==dp.back()) {
len.push_back(dp.size());
}
else if(arr[i]<=dp[0]) {
dp[0]=arr[i];
len.push_back(1);
}
else {
int l=0,r=dp.size(),ack=l;
while(l<r) {
int mid = (l+r)>>1;
if(dp[mid]>=arr[i]) r=mid;
else l=mid+1,ack=mid;
}
dp[ack+1]=arr[i];
len.push_back(ack+2);
}
mx = max(mx,len.back());
}
vector<int> result(mx);
for(int i=arr.size()-1,j=mx;j>0;i--) {
if(len[i]==j) {
result[--j]=arr[i];
}
}
return result;
}
};