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

    你可能感兴趣的文章
    OpenCV与AI深度学习 | 实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV传统方法实现密集圆形分割与计数(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | OpenCV实现扫描文本矫正应用与实现详解(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | YOLO11自定义数据集训练实现缺陷检测 (标注+训练+预测 保姆级教程)
    查看>>
    OpenCV与AI深度学习 | 实战 | YOLOv10模型微调检测肾结石并提高准确率
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV和Streamlit搭建虚拟化妆应用程序(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用OpenCV确定对象的方向(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YOLOv8 Pose实现瑜伽姿势识别
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用YoloV8实例分割识别猪的姿态(含数据集)
    查看>>
    OpenCV与AI深度学习 | 实战 | 使用姿态估计算法构建简单的健身训练辅助应用程序
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于OpenCV和K-Means聚类实现颜色分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YoloV5和Mask RCNN实现汽车表面划痕检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9+SAM实现动态目标检测和分割(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 基于YOLOv9和OpenCV实现车辆跟踪计数(步骤 + 源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 文本图片去水印--同时保持文本原始色彩(附源码)
    查看>>
    OpenCV与AI深度学习 | 实战 | 通过微调SegFormer改进车道检测效果(数据集 + 源码)
    查看>>
    OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战篇——基于YOLOv8和OpenCV实现车速检测(详细步骤 + 代码)
    查看>>
    OpenCV与AI深度学习 | 实战|OpenCV实时弯道检测(详细步骤+源码)
    查看>>
    OpenCV与AI深度学习 | 实用技巧 | 使用OpenCV进行模糊检测
    查看>>