其他分享
首页 > 其他分享> > 俄罗斯套娃信封

俄罗斯套娃信封

作者:互联网

给一定数量的信封,带有整数对 (w, h) 分别代表信封宽度和高度。一个信封的宽高均大于另一个信封时可以放下另一个信封。
求最大的信封嵌套层数。

样例

样例 1:

输入:[[5,4],[6,4],[6,7],[2,3]]
输出:3
解释:
最大的信封嵌套层数是 3 ([2,3] => [5,4] => [6,7])。

样例 2:

输入:[[4,5],[4,6],[6,7],[2,3],[1,1]]
输出:4
解释:
最大的信封嵌套层数是 4 ([1,1] => [2,3] => [4,5] / [4,6] => [6,7])。

 

bool mycmp(pair<int, int>& A, pair<int, int>& B)
{
    if(A.first < B.first)
    {
        return true;
    }
    else if(A.first > B.first)
    {
        return false;
    }
    if(A.second > B.second)
    {
        return true;
    }
    
    return false;
}

void myprint(pair<int, int>& A)
{
    cout<<A.first<<" "<<A.second<<endl;
}
class Solution {
public:
    /*
     * @param envelopes: a number of envelopes with widths and heights
     * @return: the maximum number of envelopes
     */
    int maxEnvelopes(vector<pair<int, int>>& envelopes) {
        // write your code here
        sort(envelopes.begin(), envelopes.end(), mycmp);
        //for_each(envelopes.begin(), envelopes.end(), myprint);
        vector<int> nums;
        for(int i = 0; i < envelopes.size(); i++)
        {
            nums.push_back(envelopes[i].second);
        }
        
        return longestIncreasingSubsequence(nums);
    }
    
    int longestIncreasingSubsequence(vector<int> &nums) 
    {
        // write your code here
        int size = nums.size();
        int res = 0;
        int top[size];
        int piles = 0;
        for(int i = 0; i < size; i++)
        {
            int poker = nums[i];
            int left = 0;
            int right = piles;
            while(left < right)
            {
                int mid = (left + right) / 2;
                if(top[mid] >= poker)
                {
                    right = mid;
                }
                else
                {
                    left = mid + 1;
                }
            }
            if(left == piles)
                piles++;
            top[left] = poker;
        }
        return piles;
    }
};

 

标签:信封,return,nums,int,envelopes,套娃,俄罗斯,left
来源: https://blog.csdn.net/weixin_41791402/article/details/100062636