题解链接:一步一步推导出官方最优解法,详细图解
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
vector<int> minnums;
for(int i : nums){
if(!minnums.size() || i > minnums.back()){
minnums.push_back(i);
}
else{
minnums[find(i,minnums,0,minnums.size())] = i;
}
}
return(minnums.size());
}
//二分查找
int find(int x,vector<int> minnums,int l,int r){
int m = 0;
while(l <= r){
m = (l+r)/2;
if(minnums[m] == x) return m;
else if(minnums[m] > x) r = m-1;
else l = m + 1;
}
return l;
}
};