leetcode 354. 俄罗斯套娃信封问题总结(c++实现)

您所在的位置:网站首页 你知道俄罗斯套娃吗 leetcode 354. 俄罗斯套娃信封问题总结(c++实现)

leetcode 354. 俄罗斯套娃信封问题总结(c++实现)

2024-07-15 18:34:46| 来源: 网络整理| 查看: 265

题目描述:

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

请计算最多能有多少个信封能组成一组“俄罗斯套娃”信封(即可以把一个信封放到另一个信封里面)。

说明:

不允许旋转信封。

示例:

输入: envelopes = [[5,4],[6,4],[6,7],[2,3]] 输出: 3 解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。

解法一: 普通的dp

这个解法理解起来好一些,但是效率不高. 在这里插入图片描述 解释: 首先,排序,sort默认排序是从小到大排序.由于这里有两个值,所以在宽度W相同的情况下,就按照H从小到大排序, 当然,更好的解法是使得高度H从大到小排,但一般那个想法不容易想到,要在考试的时候相出来比较难. 排序完成后,就可以进行动态规划了,这个就是一个最长上升子序列问题,最笨的方法就是这样: 遍历排序后的envelopes, 举个例子:

envelopes[2,100][3,200][4,300][5,250][5,400][5,500][6,360][6,370][7,380]idx012345678dp123344445

dp中的值代表以当前信封结尾的前面所有序列的最长上升子序列的长度.例如,在idx=6的位置,因为它前面的[5,400]和[5,500]的H都比[6,360]大,所以,它遍历它前面比大小的dp最大值的位置,在追加上当前值,组成当前位置的dp[6].这个过程比较耗时,因为没到一个位置,都要遍历一遍它前面的所有数.

那么,有人就想到了一个好办法,就是使用二分法找到它左边第一个比它的H大的那个数,用当前这个数替代它.例如,对于[6,360]来说,它的左边第一个比它大的数就是[5,400],则每一步都这么做的话,最终的dp长度就是所要求的结果.这就有了第二种方法.移步到->解法二.

class Solution { public: int maxEnvelopes(vector& envelopes) { int n = envelopes.size(); if(n == 0) return 0; sort(envelopes.begin(), envelopes.end()); vector dp(n, 1); dp[0] = 1; int res = 1; for(int i = 1; i


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭