class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int m = nums.size();
if(m==0||m==1)return m;
vector<int> res(m,1);
/*
//这是时间复杂度为O(n*n)的方法
int maxn= 0;
for(int i=1;i<m;i++){
for(int j=0;j<i;j++)
if(nums[i]>nums[j])res[i]=max(res[i],res[j]+1);
maxn = max(res[i],maxn);
}
return maxn;*/
//时间复杂度为O(n*log n)
int size = 0,j=0,i=0;
for(auto it:nums){
i=0;
j=size;
while(i!=j){
int mid = i+(j-i)/2;
if(res[mid]<it)
i=mid+1;
else j=mid;
}
res[i]=it;
if(i==size)size++;
}
return size;
}
};