最长递增子序列(一维二维)
Posted 松狮MVP
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最长递增子序列(一维二维)相关的知识,希望对你有一定的参考价值。
1、一维:
void main01()
vector<int> data = 2, 1, 6, 4, 5, 2, 7, 4;
vector<int> len(data.size(), 1); //记录长度的辅助数组
int maxx = len[0];
for (int i = 1; i < data.size(); i++)
int cur = 0;
for (int j = 0; j < i; j++)
if (data[j] < data[i] && cur < len[j])
cur = len[j]; //选出比当前元素小的中的len的最大值
len[i] = cur + 1; //当前元素的len值是前面比它小的并且在小的中的最大值加1(把当前元素加到序列中)
maxx = max(maxx, len[i]); //每一步直接选出当前最大值
cout << maxx << endl;
2、二维:
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool comp(pair<int, int> a, pair<int, int> b) //自定义比较器
if (a.first == b.first)
return a.second<b.second;
return a.first<b.first;
;
int maxEnvelopes(vector<pair<int, int>>& envelopes)
sort(envelopes.begin(), envelopes.end(), comp); // 排序
vector<int> len(envelopes.size(), 1); //初始化
int maxx = 0;
if (envelopes.size()>0)
maxx = 1;
for (int i = 1; i<envelopes.size(); i++)
int cur = 0;
for (int j = 0; j<i; j++)
if (envelopes[i].first > envelopes[j].first && envelopes[i].second > envelopes[j].second && cur < len[j])
cur = len[j];
len[i] = cur + 1;
maxx = max(maxx, len[i]);
return maxx;
void main()
int first, second;
vector<pair<int, int> > data;
while (cin >> first >> second) //回车+ctrl+Z结束输入
data.push_back(pair<int, int>(first, second));
cout << maxEnvelopes(data) << endl;
以上是关于最长递增子序列(一维二维)的主要内容,如果未能解决你的问题,请参考以下文章