博客
关于我
力扣 354. 俄罗斯套娃信封问题
阅读量:359 次
发布时间:2019-03-04

本文共 858 字,大约阅读时间需要 2 分钟。

为了解决这个问题,我们需要找到最多能有多少个信封组成一组“俄罗斯套娃”信封。每个信封可以放进另一个信封里,前提是另一个信封的宽度和高度都比它大。

方法思路

  • 排序信封:首先将信封按照宽度升序、高度降序排序。这样,当宽度相同的时候,高度大的信封排在前面,这样可以让高度尽可能小,从而为后面的递增留出空间。
  • 提取高度数组:从排序后的信封中提取高度数组。
  • 动态规划:使用动态规划来找高度数组中的最长递增子序列的长度。这个长度就是我们能组成的最大俄罗斯套娃信封的数量。
  • 解决代码

    class Solution:    def maxEnvelopes(self, envelopes: List[List[int]]) -> int:        # 按宽度升序排序,宽度相同则高度降序排序        envs = sorted(envelopes, key=lambda x: (x[0], -x[1]))        hs = [x[1] for x in envs]        n = len(hs)        if n == 0:            return 0        f = [1] * n        for i in range(n):            for j in range(i):                if hs[i] > hs[j]:                    f[i] = max(f[i], f[j] + 1)        return max(f)

    代码解释

  • 排序信封:使用sorted函数,按照宽度升序和高度降序排列。
  • 提取高度数组:从排序后的信封中提取高度,得到一个高度数组hs
  • 动态规划:初始化一个数组f,其中f[i]表示到第i个元素时,最长递增子序列的长度。通过双重循环遍历,更新f数组,使得每个元素的值等于前面所有比它小的元素的值加1,取最大的那个值。
  • 返回结果f数组中的最大值即为最多能组成的俄罗斯套娃信封的数量。
  • 转载地址:http://cscr.baihongyu.com/

    你可能感兴趣的文章
    Python mock 修补另一个函数调用的函数
    查看>>
    python mqtt 客户端实现
    查看>>
    Python Multiprocessing - 将类方法应用于对象列表
    查看>>
    Python multiprocessing.Queue 与 multiprocessing.manager().Queue()
    查看>>
    Python multiprocessing使用详解
    查看>>
    python mysql 基于 sqlalvhrmy_Python操作MySQL:pymysql和SQLAlchemy
    查看>>
    python mysql 布尔类型_python语言的基础学习:基本类型,函数,面向对象,模块,mysql数据库...
    查看>>
    Python NLP完整项目实战教程(1)
    查看>>
    Python NLP自然语言处理详解
    查看>>
    python nltk nltk_data 离线安装,chatterbot
    查看>>
    Redis 限流的 3 种方式,还有谁不会?
    查看>>
    Python这么慢,为啥大公司还在用?
    查看>>
    python note 06 编码方式
    查看>>
    python numba 转灰度图_使用NumPy、Numba的简单使用(二)
    查看>>
    Python Numpy 关于 linspace()函数 使用详解(全)
    查看>>
    Python numpy插入、读取至postgreSQL数据库中bytea类型字段
    查看>>
    Python numpy数据的保存和读取
    查看>>
    python numpy矩阵索引_python – 在2D numpy ndarray或numpy矩阵中获取前N个值的索引
    查看>>
    Python OCR库:自动化测试验证码识别神器!
    查看>>
    python opencv - 斑点检测或圆形检测
    查看>>