【力扣】354. 俄罗斯套娃信封问题 | 您所在的位置:网站首页 › 正宗俄罗斯套娃有几个颜色 › 【力扣】354. 俄罗斯套娃信封问题 |
以下为力扣官方题解 354. 俄罗斯套娃信封问题 题目说明:示例: 官方题解前言方法一:动态规划思路与算法代码复杂度分析 方法二:基于二分查找的动态规划思路与算法代码复杂度分析 题目给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。 请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。 说明:不允许旋转信封。 示例:输入: e n v e l o p e s = [ [ 5 , 4 ] , [ 6 , 4 ] , [ 6 , 7 ] , [ 2 , 3 ] ] envelopes = [[5,4],[6,4],[6,7],[2,3]] envelopes=[[5,4],[6,4],[6,7],[2,3]] 输出: 3 3 3 解释: 最多信封的个数为 3 3 3, 组合为: [ 2 , 3 ] = > [ 5 , 4 ] = > [ 6 , 7 ] [2,3] => [5,4] => [6,7] [2,3]=>[5,4]=>[6,7]。 官方题解 前言根据题目的要求,如果我们选择了 k k k 个信封,它们的的宽度依次为 w 0 , w 1 , ⋯ , w k − 1 w_0, w_1, \cdots, w_{k-1} w0,w1,⋯,wk−1,高度依次为 h 0 , h 1 , ⋯ , h k − 1 h_0, h_1, \cdots, h_{k-1} h0,h1,⋯,hk−1,那么需要满足: { w 0 < w 1 < ⋯ < w k − 1 h 0 < h 1 < ⋯ < h k − 1 \begin{cases} w_0 < w_1 < \cdots < w_{k-1} \\ h_0 < h_1 < \cdots < h_{k-1} \end{cases} {w0 public int maxEnvelopes(int[][] envelopes) { if (envelopes.length == 0) { return 0; } int n = envelopes.length; Arrays.sort(envelopes, new Comparator() { public int compare(int[] e1, int[] e2) { if (e1[0] != e2[0]) { return e1[0]-e2[0]; } else { return e2[1]-e1[1]; } } }); int[] f = new int[n]; Arrays.fill(f, 1); int ans = 1; for (int i=1; i if (envelopes[j][1] public int maxEnvelopes(int[][] envelopes) { if (envelopes.length == 0) { return 0; } int n = envelopes.length; Arrays.sort(envelopes, new Comparator() { public int compare(int[] e1, int[] e2) { if (e1[0] != e2[0]) { return e1[0]-e2[0]; } else { return e2[1]-e1[1]; } } }); List f = new ArrayList(); f.add(envelopes[0][1]); for (int i=1; i f.add(num); } else{ int index = binarySearch(f, num); f.set(index, num); } } return f.size(); } public int binarySearch(List f, int target) { int low = 0, high = f.size()-1; while (low low = mid + 1; } else { high = mid; } } return low; } } 复杂度分析 时间复杂度: O ( n log n ) O(n \log n) O(nlogn),其中 n n n 是数组 e n v e l o p e s envelopes envelopes 的长度,排序需要的时间复杂度为 O ( n log n ) O(n \log n) O(nlogn),动态规划需要的时间复杂度同样为 O ( n log n ) O(n \log n) O(nlogn)。空间复杂度: O ( n ) O(n) O(n),即为数组 f f f 需要的空间。 |
CopyRight 2018-2019 实验室设备网 版权所有 |