最长上升子序列
最长上升子序列(nlogn)
nlogn)int LIS(vector<int>& nums) {
int n = nums.size();
vector<int> vec;
for (int i = 0; i < n; i++) {
int p = lower_bound(vec.begin(), vec.end(), nums[i]) - vec.begin(); //二分查找,返回大于等于nums[i]的第一个位置
if (p == vec.size()) //添加进来
vec.push_back(nums[i]);
else
vec[p] = nums[i]; //替换掉
}
for (auto it : vec)
cout << it << " ";
cout << endl;
return vec.size(); //返回所维护数组的大小
}如果求最长不降子序列,需要把lower_bound换成upper_bound
Last updated