Longest Increasing Subsequence最长增长子序列
程序员文章站
2022-06-06 15:54:20
...
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;
}
};
推荐阅读
-
最长上升子序列(LIS: Longest Increasing Subsequence)
-
【dp-LIS】牛客网 --最长上升子序列 POJ 2533--Longest Ordered Subsequence(LIS模板题)
-
最长递增子序列(Longest Increasing Subsequence)
-
最长上升子序列(LIS: Longest Increasing Subsequence)
-
最长上升子序列 Longest Increasing Subsequence 输出其中一个序
-
Longest Increasing Subsequence最长增长子序列
-
LeetCode 题解之 300. Longest Increasing Subsequence(最长上升子序列 LIS)