354. 俄罗斯套娃信封问题--(每日一难phase2--day9)
354. 俄罗斯套娃信封问题
给你一个二维整数数组 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
提示:
1 <= envelopes.length <= 1e5
envelopes[i].length == 2
1 <= wi, hi <=1e5
解析:
- 可以根据第一维从小到大,第二维从大到小排序(记为x,y)(不用特殊判断一维相等情况,(1,2)(1,3)(1,4))
- 遍历每个元素,能套进去的一定在该元素之前,利用动态规划找符合条件的最大信封数时间复杂度为O(N*2)
- 可以利用二分降低复杂度 f[j]表示信封个数为j的最大元素值,显然f[j+1]>f[j],f为单调递增的数组。如果当前envelopes[i][1]>f.back();说明该信封可以将最大信封装入f[j+1]=envelopes[i][1]
- f的长度就是信封最大数。
代码:
bool cmp(const vector<int>& l,const vector<int>& r){if(l[0]==r[0])return l[1]>r[1];else return l[0]<r[0];
}
class Solution {public:// 二维问题,一维一维解决int maxEnvelopes(vector<vector<int>>& envelopes) {if(envelopes.size()==0)return 0;sort(envelopes.begin(),envelopes.end(),cmp);int n=envelopes.size();vector<int> f;f.push_back(envelopes[0][1]);for(int i=1;i<n;i++){int a = envelopes[i][1];// 如果当前值大于(j个信封最大值,说明当前更大)if(a>f.back())f.push_back(a);// 更新it所在位置信封数对应的最大值else{auto it=lower_bound(f.begin(),f.end(),a);*it=a;}}return f.size();}
};
354. 俄罗斯套娃信封问题--(每日一难phase2--day9)相关推荐
- 354. 俄罗斯套娃信封问题
354. 俄罗斯套娃信封问题 题目 一.思路 二.代码 总结 题目 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. ...
- LeetCode - 354 俄罗斯套娃信封问题
题目来源 354. 俄罗斯套娃信封问题 - 力扣(LeetCode) 题目描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的 ...
- 354. 俄罗斯套娃信封问题(动态规划)
354. 俄罗斯套娃信封问题 问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都 ...
- leetcode 354. 俄罗斯套娃信封问题(dp+二分)
给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多能有多少个信封 ...
- LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)
1. 题目 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多 ...
- leetcode 354. 俄罗斯套娃信封问题(二维排序有关)
题目描述 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多能有 ...
- 354. 俄罗斯套娃信封问题(良心注释)
问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...
- LeetCode 354 俄罗斯套娃信封问题
给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另 ...
- 【动态规划-困难】354. 俄罗斯套娃信封问题
[题目] 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...
- 力扣354——俄罗斯套娃信封问题(排序+动态规划)
思路 首先排序,后面一定不会存在比当前信封更大的信封. 对于严格大于,是具有传递性的,如果信封a比信封b大,则a比(所有b大于的信封)大,因此可以利用传递性进行动态规划. dp代表该信封能装下的最大数 ...
最新文章
- 从头到尾使用Geth的说明-3-geth参数说明和环境配置
- 3行代码就能可视化Transformer的奥义 | 开源
- python可以调试吗_调试-有什么好的方法可以使我的Python代码首次运行?
- 【玩转cocos2d-x之三十二】xml的解析
- python匿名函数lambda_python的匿名函数lambda解释及用法
- 终于,我读懂了所有Java集合——map篇
- 笔记本windows7设置WIFI教程(超详细)
- Python 学习过程问题记录
- SHN-PEG2000-Pyrene,Pyrene-PEG2000-NHS
- 矩阵论(零):线性代数基础知识整理(1)——逆矩阵、(广义)初等变换、满秩分解
- git常用命令及常见问题
- MAC 活动监视器部分状态缺失
- Web-HTML+CSS入门笔记
- 微信小程序java中文乱码_如何解决微信小程序显示中文无法上传或者出现乱码的问题?...
- Retrofit中如何正确的使用https?
- 超大跨度桥梁建设如何突破特异风致灾风险的困局?
- MES制造执行系统概述连载(一)
- Even Loop(事件循环机制)
- osgEarth加载谷歌卫星地图的源码案例
- 微信H5棋牌类及app类推广链接在微信推广中遇到的问题讨论
热门文章
- bat: 调用WinRAR.exe压缩文件
- 《穿越计算机的迷雾》读书笔记五
- WEB前端开发练习代码
- html 重复执行函数,javascript延时重复执行函数 lLoopRun.js
- 'Data_Label_Tools - 开源数据标注工具大列表
- dw中html颜色的设置颜色代码,利用Dreamweaver(DW)快速输入CSS颜色代码值
- snmp trap 如何在浏览器中_SNMP TRAP功能
- 免费的科研论文画图软件drawio以及Mermaid
- CADD课程学习(12)-- 基于碎片的药物设计(MOE)
- python图像处理(十一)——图像锐化与边缘检测之Roberts算子、Prewitt算子、Sobel算子、Laplacian算子