力扣354——俄罗斯套娃信封问题(排序+动态规划)
思路
首先排序,后面一定不会存在比当前信封更大的信封。
对于严格大于,是具有传递性的,如果信封a比信封b大,则a比(所有b大于的信封)大,因此可以利用传递性进行动态规划。
dp代表该信封能装下的最大数量的信封,初始值为1,即自身,可得转移方程
dp[i] = max(dp[i], dp[j]+1) j∈(0,i);
最后dp中的最大值即是答案。
通过两次遍历暴力DP即可。
class Solution {public:int maxEnvelopes(vector<vector<int>>& envelopes) {int n = envelopes.size();vector<int> dp(n, 1);int ans = 1;sort(envelopes.begin(), envelopes.end());for(int i = 1; i < n; i++) {for(int j = 0; j < i; j++) {if(envelopes[i][0] > envelopes[j][0] && envelopes[i][1] > envelopes[j][1]) {dp[i] = max(dp[i], dp[j] + 1);}}}for(auto x : dp) {ans = max(ans, x);}return ans;}
};
另外可以参考力扣1996——游戏中弱角色的数量(排序)进行排序上的优化,按长度升序,长度相等的宽度降序,就只需要比较于前者的宽即可,可以避免一部分比较
class Solution {public:int maxEnvelopes(vector<vector<int>>& envelopes) {int n = envelopes.size();vector<int> dp(n, 1);int ans = 1;sort(envelopes.begin(), envelopes.end(), [](const auto& a, const auto& b) {return a[0] == b[0] ? a[1] > b[1] : a[0] < b[0];});for(int i = 1; i < n; i++) {for(int j = 0; j < i; j++) {if(envelopes[i][1] > envelopes[j][1]) {dp[i] = max(dp[i], dp[j] + 1);}}}for(auto x : dp) {ans = max(ans, x);}return ans;}
};
力扣354——俄罗斯套娃信封问题(排序+动态规划)相关推荐
- 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. 俄罗斯套娃信封问题(二维排序有关)
题目描述 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现.当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多能有 ...
- 【动态规划-困难】354. 俄罗斯套娃信封问题
[题目] 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...
- LeetCode 354. 俄罗斯套娃信封问题(最长上升子序 DP/二分查找)
1. 题目 给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样. 请计算最多 ...
- 力扣解法汇总969-煎饼排序
原题链接:力扣 描述: 给你一个整数数组 arr ,请使用 煎饼翻转 完成对数组的排序. 一次煎饼翻转的执行过程如下: 选择一个整数 k ,1 <= k <= arr.length 反转子 ...
- LeetCode 第 58 场力扣夜喵双周赛(动态规划、马拉车算法,前后缀处理)/ 第 253 场力扣周赛(贪心,LIS)
第 58 场力扣夜喵双周赛 两道600多 5193. 删除字符使字符串变好 题目描述 一个字符串如果没有 三个连续 相同字符,那么它就是一个 好字符串 . 给你一个字符串 s ,请你从 s 删除 最少 ...
- 354. 俄罗斯套娃信封问题(良心注释)
问题描述 给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度. 当另一个信封的宽度和高度都比这个信封大的时候,这个信封就 ...
最新文章
- Windows10+anaconda,python3.5, 安装glove-python
- 购买《四级网络工程师预测试卷与考点解析》,哪里最便宜?
- 用c语言编写一个2048 游戏,求c语言编写的2048游戏代码,尽量功能完善一些
- win10远程桌面连接凭据怎么设置_想在家办公,只需打开win10远程桌面连接就可以了,还犹豫什么...
- 【Flink】Flink连接prometheus报错 IOException :Response code formxxx/metrics/job/rule
- 修改mongodb最大查询数_mongodb数据库如何查询某个字段的最大值?
- Web前端-HTML基础
- Matlab除法结果取整
- docker视频教程 假装听听 应该还行
- 记录一下,不是所有的韩语输入法apk,装到同一个系统,都能弹出软键盘
- 怎么用java打开pkg文件怎么打开_pkg文件怎么打开,小编教你怎么打开pkg文件
- 基础数学4:导数、偏导数、方向导数、梯度、全微分回顾
- HTML 常用选择框
- 关于中文分词的一元分词讨论
- CoinBene 满币荣获「2020 年度最佳品牌增长」大奖 未来可期
- 【GNN报告】复旦大学许嘉蓉:基于图数据的鲁棒机器学习
- 计算机各部分名称ppt,PowerPoint软件界面各部分名称(PPT2010/2013/2016)
- WPF窗体禁用Alt + F4键关闭窗体
- 吉利汽车资深总工程师刘卫国:智能驾驶汽车核心技术之控制器
- 怎样在手机中将PPT转换成PDF