俄罗斯套娃问题;
描述
中文English
给一定数量的信封,带有整数对
(w, h)分别代表信封宽度和高度。一个信封的宽高均大于另一个信封时可以放下另一个信封。
求最大的信封嵌套层数。
解法一:
二分查找 + pair对的第二位采取求最长子序列方法
通过率100%。
注意:代码中有6处容易错的地方,已经标注出来!
class Solution {
public:
/*
* @param envelopes: a number of envelopes with widths and heights
* @return: the maximum number of envelopes
*/
static bool comp(const pair<int,int>& a, const pair<int,int>& b){
if(a.first!=b.first) return a.first<b.first; //容易错1:按升序
return a.second>b.second; //容易错2:注意这里按降序
}
int maxEnvelopes(vector<pair<int, int>>& envelopes) {
sort(envelopes.begin(),envelopes.end(), comp);
int size = envelopes.size();
vector<int> dp;
for(auto it

本文探讨了俄罗斯套娃问题,即如何确定最大信封嵌套层数。介绍了两种解法,一是结合二分查找和最长子序列方法,二是使用动态规划。在解法一中,重点解释了比较函数comp的设计,特别是第二位为什么要降序排列,以确保正确判断信封的嵌套关系。解法二虽通过率较低,但也提供了一种不同的思路。
最低0.47元/天 解锁文章
1031

被折叠的 条评论
为什么被折叠?



