# 俄罗斯套娃信封问题

给你一个二维整数数组 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

 

提示:

## 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 ```