【力扣】354. 俄罗斯套娃信封问题 您所在的位置:网站首页 正宗俄罗斯套娃有几个颜色 【力扣】354. 俄罗斯套娃信封问题

【力扣】354. 俄罗斯套娃信封问题

2024-06-01 10:20| 来源: 网络整理| 查看: 265

以下为力扣官方题解

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 实验室设备网 版权所有