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

首先先将宽度排序,再宽度排好序之后找出高度的最长递增子序列就行了。

有一个小细节,

我们必须要保证对于每一种 w 值,我们最多只能选择 1 个信封。

我们可以将 h 值作为排序的第二关键字进行降序排序,这样一来,对于每一种 w 值,其对应的信封在排序后的数组中是按照 h 值递减的顺序出现的,那么这些 h 值不可能组成长度超过 1 的严格递增的序列,这就从根本上杜绝了错误的出现(在长度大于1的子序列中,这些h值不可能同时出现)。

之后再套上最长递增子序列的方法。

from typing import *
import bisectclass Solution:def maxEnvelopes(self, envelopes: List[List[int]]) -> int:envelopes.sort(key=lambda x: (x[0], -x[1]))arr = []for _, val in envelopes:idx = bisect.bisect_left(arr, val)if idx == len(arr):arr.append(val)else:arr[idx] = valreturn len(arr)

LeetCode 354 俄罗斯套娃信封问题相关推荐

  1. LeetCode - 354 俄罗斯套娃信封问题

    题目来源 354. 俄罗斯套娃信封问题 - 力扣(LeetCode) 题目描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的 ...

  2. LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)

    1. 题目 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多 ...

  3. leetcode 354. 俄罗斯套娃信封问题(二维排序有关)

    题目描述 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多能有 ...

  4. leetcode 354. 俄罗斯套娃信封问题(dp+二分)

    给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多能有多少个信封 ...

  5. 354. 俄罗斯套娃信封问题

    354. 俄罗斯套娃信封问题 题目 一.思路 二.代码 总结 题目 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. ...

  6. 354. 俄罗斯套娃信封问题(动态规划)

    354. 俄罗斯套娃信封问题 问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都 ...

  7. 354. 俄罗斯套娃信封问题(良心注释)

    问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...

  8. 【动态规划-困难】354. 俄罗斯套娃信封问题

    [题目] 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...

  9. 力扣354——俄罗斯套娃信封问题(排序+动态规划)

    思路 首先排序,后面一定不会存在比当前信封更大的信封. 对于严格大于,是具有传递性的,如果信封a比信封b大,则a比(所有b大于的信封)大,因此可以利用传递性进行动态规划. dp代表该信封能装下的最大数 ...

最新文章

  1. listview 打开文件 c#_.NET CORE(C#) WPF简单菜单MVVM绑定
  2. 基于TCP协议的通信模型
  3. hive初识.docx
  4. 【java】Java异常处理总结
  5. WebRTC 的音频处理流水线
  6. python until怎么用_python基础之从认识python到python的使用
  7. Unity3D基础25:AudioSource声音组件
  8. C++ for (auto it:myset) 是什么意思 引用
  9. idea打包java项目
  10. EPSON TM U220串口打印机乱码
  11. VS_MFC:压缩文件存储空间
  12. nyoj145 聪明的小柯
  13. css所有属性大合集,包含中文标题
  14. java基于springboot在线小说阅读网站
  15. ARP(地址解析协议)和RARP(逆地址解析协议)
  16. 【算法】求解钱币兑换问题
  17. PgSQL · 乱入拜年 · 小鸡吉吉和小象Pi吉(PostgreSQL)的鸡年传奇
  18. Github已星标180K又一神作,阿里巴巴内部并发编程笔记,难道Java真的凉了
  19. vue兼容IE8以上解决方案
  20. web网站总是出现404 bug?照着以下几个原因排查,不怕修复不了啦

热门文章

  1. VTK:频率处理——高通滤波(理想)
  2. Object类中常见的方法
  3. 《多移动机器人协同原理与技术》读书笔记(一、绪论)
  4. 安装window7系统解决不能使用驱动精灵安装声卡驱动问题
  5. matlab打印图片数据,如何用matlab输出高质量(论文级)图片?
  6. 数字信号处理二:离散时间信号的运算
  7. 沃可趣 | 企业内部互动社区,职场也能成为秀场
  8. 计算机都学什么数学,2019考研计算机数学都考什么?
  9. 如何彻底删除卸载JDK?
  10. 1000+AutoCAD字体符号素材大分享