https://leetcode-cn.com/problems/russian-doll-envelopes/
思路:先按照
w
w
w从小到大对输入进行排序,那么问题就转换成了
L
I
S
LIS
LIS,但是还有一些地方需要注意,套娃时信封的
w
、
h
w、h
w、h要求都是单调递增的,所以排序后
w
w
w相等的信封只能选
1
1
1个,怎么保证这一点呢?在
w
w
w相等时,我们可以按照
h
h
h从大到小排序,这样在计算
L
I
S
LIS
LIS时相同
w
e
we
we的信封一定最多选一个。
class Solution {
public:
int maxEnvelopes(vector<vector<int>>& envelopes) {
sort(envelopes.begin(),envelopes.end(),[](const vector<int>& v1,const vector<int>& v2){
return v1[0]<v2[0]||(v1[0]==v2[0]&&v1[1]>v2[1]);
});
vector<int> ans;
for(const vector<int>& ele:envelopes)
{
if(ans.empty()||ele[1]>ans.back())
ans.push_back(ele[1]);
else
*lower_bound(ans.begin(),ans.end(),ele[1])=ele[1];
}
return ans.size();
}
};