博客
关于我
力扣 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/

    你可能感兴趣的文章
    php5ts.dll 下载_php5ts.dll下载
    查看>>
    php7
    查看>>
    PHP7 新特性
    查看>>
    PHP7+MySQL5.7+Nginx1.9. on Ubuntu 14.0
    查看>>
    php7.1.6 + redis
    查看>>
    php7中使用php_memcache扩展
    查看>>
    PHP7中十个需要避免的坑
    查看>>
    php7和PHP5对比的新特性和性能优化
    查看>>
    PHP7安装pdo_mysql扩展
    查看>>
    PHP7实战开发简单CMS内容管理系统(7) 后台登录架构 用户登录校验
    查看>>
    php7,从phpExcel升级到PhpSpreadsheet
    查看>>
    PHP8.1 + ThinkPHP实战指南:高效构建现代化网站的六大技巧
    查看>>
    PHP8中match新语句的操作方法
    查看>>
    PHP:第一章——PHP中常量和预定义常量
    查看>>
    PHP:第一章——PHP中的位运算
    查看>>
    phpcms
    查看>>
    phpcms 2008 product.php pagesize参数代码注射漏洞
    查看>>
    phpcms V9 自定义添加 全局变量{DIY_PATH}方法
    查看>>
    Redis五种核心数据结构的基本使用与应用场景
    查看>>
    Redis五种数据结构简介
    查看>>