354. 俄罗斯套娃信封问题

简介: 354. 俄罗斯套娃信封问题

题目

给你一个二维整数数组 envelopes ,其中 envelopes[i] = [wi, hi] ,表示第 i 个信封的宽度和高度。

当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。

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

注意:不允许旋转信封。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/russian-doll-envelopes
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。`

解题思路

在这里插入图片描述

排序:长度由小到大,长度一样的时候高度由大到小
在这里插入图片描述
得到一个数组:5326462
结论,这个数组中最长递增子序列长度就是套娃最多能套多少层
长度跟我一样的东西,高度不如我的,在我后面
那么只要左侧高度小于我,它长度必须小于我,我所形成的递增子序列必能套进去
我们排除了干扰项,为什么高度要由大到小排,就是为了防止高度比我小的,在我左边干扰我形成递增子序列

代码

class Solution {
    public class Envelope{
        public int l;
        public int h;
        public Envelope(int width,int height){
            this.l=width;
            this.h=height;
        }
    }
    public class envelopeComparator implements Comparator<Envelope>{
        public int compare(Envelope o1,Envelope o2){
            return o1.l!=o2.l?o1.l-o2.l:o2.h-o1.h;
        }
    }
    public int maxEnvelopes(int[][] envelopes) {
        int n=envelopes.length;
        Envelope[] env=new Envelope[n];
        for(int i=0;i<n;i++){
            env[i]=new Envelope(envelopes[i][0],envelopes[i][1]);
        }
        Arrays.sort(env,new envelopeComparator());
        int[] end=new int[n];
        end[0]=env[0].h;
        int right=0;
        int l=0;
        int r=0;
        int m=0;
        for(int i=1;i<n;i++){
            l=0;
            r=right;
            while(l<=r){
                m=l+(r-l)/2;
                if(env[i].h>end[m]){
                    l=m+1;
                }else{
                    r=m-1;
                }
            }
            right=Math.max(right,l);
            end[l]=env[i].h;
        }
        return right+1;
    }

}
相关文章
|
11月前
|
机器学习/深度学习 算法 测试技术
C++二分查找算法的应用:俄罗斯套娃信封问题
C++二分查找算法的应用:俄罗斯套娃信封问题
|
供应链 物联网 数据安全/隐私保护
优衣库 UNIQLO,藏着多少秘密
优衣库 UNIQLO,藏着多少秘密
|
人工智能 算法 C++
每日算法系列【LeetCode 354】俄罗斯套娃信封问题
每日算法系列【LeetCode 354】俄罗斯套娃信封问题
|
算法 Java
【算法】缺失的第一个正数,俄罗斯套娃信封问题
1.缺失的第一个正数 2.俄罗斯套娃信封问题
110 10
|
Java 程序员
工资条里藏着这些小秘密,第一个就有很多人不知道!
工资条里藏着的那些小秘密,更事关你的诸多权益!
1582 0
USNews大学排名遭美国计算机研究学会怒怼,指排名荒谬要求撤回
】USNews世界大学排名最新发布的2018年榜单,计算机科学学科排名清华大学力压MIT、斯坦福位居第一。很多媒体欢呼,但计算机科学专业人士则表示看看就好,不必当真。果然,就在今天,计算机研究学会(CRA)发布声明,要求USNews撤回这一“荒谬的”排名。
1832 0
|
安全 区块链 数据安全/隐私保护
富豪与屌丝之间仅隔了一个黑客距离,韩国最大数字货币交易所Bithumb被黑
本文讲的是富豪与屌丝之间仅隔了一个黑客距离,韩国最大数字货币交易所Bithumb被黑,还记得今年5月韩国比特币交易网站Yapizon被黑,从而损失约合550万美元的事件吗?在经过评估后,平台决定将损失分摊到每一位用户身上,这倒霉的事,让计划投资数字货币的用户也是醉了。
2005 0