题目描述:给定一个无序的整数数组,找到其中最长上升子序列的长度。
题目链接:300. 最长上升子序列
- nlogn求最长上升子序列
- 记录每个长度的上升子序列的 "结尾"的最小值
class Solution {
public:
int lengthOfLIS(vector<int>& nums) {
int tot=0;
int x[nums.size()+5];
for (int i=0;i<nums.size();i++){
if (tot==0){
tot++;
x[tot]=nums[i];
}
else{
int l=1,r=tot;
int mid;
if (nums[i]>x[tot]){
tot++;
x[tot]=nums[i];
continue;
}
while (l<r){
mid=(l+r)/2;
if (x[mid]>=nums[i]) r=mid;
else l=mid+1;
}
x[l]=nums[i];
}
}
return tot;
}
};