# 俄罗斯套娃信封问题
给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。
当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。
请计算 最多能有多少个 信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。
注意:不允许旋转信封。
示例 1:
输入:envelopes = [[5,4],[6,4],[6,7],[2,3]]
输出:3
解释:最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。
示例 2:
输入:envelopes = [[1,1],[1,1],[1,1]]
输出:1
提示:
1 <= envelopes.length <= 5000
envelopes[i].length == 2
1 <= wi, hi <= 104
## template
```java
class Solution {
public int maxEnvelopes(int[][] envelopes) {
int n = envelopes.length;
if (n == 0)
return 0;
Arrays.sort(envelopes, new Comparator() {
public int compare(int[] a, int[] b) {
if (a[0] != b[0])
return a[0] - b[0];
return b[1] - a[1];
}
});
List lastHeight = new ArrayList<>();
lastHeight.add(envelopes[0][1]);
for (int i = 1; i < n; i++) {
int h = envelopes[i][1];
if (h > lastHeight.get(lastHeight.size() - 1))
lastHeight.add(h);
else {
int l = 0, r = lastHeight.size() - 1;
while (r > l) {
int m = (l + r) >> 1;
if (lastHeight.get(m) < h)
l = m + 1;
else
r = m;
}
lastHeight.set(l, h);
}
}
return lastHeight.size();
}
}
```
## 答案
```java
```
## 选项
### A
```java
```
### B
```java
```
### C
```java
```