时间复杂度O(n^2)
int LIS_nn(){
int ans=0;//ans代表LIS的长度
for(int i=1;i<=n;i++){
dp[i]=1;//dp[]表示以第i个字符结束时的最长LIS
for(int j=1;j<i;j++){
if(a[j]<a[i]){//a[]表示输入的字符
dp[i]=max(dp[i],dp[j]+1);
}
}
ans=max(ans,dp[i]);
}
return ans;
}
时间复杂度O(nlgn)
int LIS_nlgn(){
int len=1;//len代表最终的长度
dp[1]=a[1];//初始化
for(int i=2;i<=n;i++){
if(a[i]>dp[len]){
dp[++len]=a[i];
}else{
int pos=lower_bound(dp+1,dp+len+1,a[i])-dp;//重新插入到合适位置,目的升序排序
dp[pos]=a[i];
}
}
return len;
}