class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param letters intvector<vector<>>
* @return int
*/
/*
二维问题是信封嵌套,一维问题就是一个数组中最长递增子序列是多少。
如何将二维问题转化成一维问题呢?
信封=长X宽。
1,先对长进行递增排序,若长相等的,宽度要递减排序
所以从后遍历,若宽度>前面的,表示后面可以嵌套前面的。
*/
static bool cmp(vector<int> &a, vector<int> &b) {
if (a[0] == b[0]) {
return a[1] > b[1];
}
return a[0] < b[0];
}
int maxLetters(vector<vector<int> >& letters) {
// write code here
// 对输入进行判断
if(letters.size() == 0) {
return 0;
}
int len = letters.size();
sort(letters.begin(), letters.end(), cmp);
vector<int>dp(len, 1);
int ret = 1;
for (int i = 1; i < len; i++) {
for (int j = 0; j < i; j++) {
if (letters[i][1] > letters[j][1]) {
dp[i] = max(dp[i], dp[j] + 1);
}
ret = max (ret, dp[i]);
}
}
return ret;
}
};