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;
    }

}
AI 代码解读
相关文章
ENVI:如何进行对自带RPC的图像进行RPC正射校正呢?
ENVI:如何进行对自带RPC的图像进行RPC正射校正呢?
1587 0
Vue.js框架在构建单页面应用中的最佳实践
Vue.js最佳实践包括组件化(如单一职责组件)、使用Vuex管理状态、axios处理异步请求、Vue Router进行路由、优化性能(keep-alive及懒加载)和选择UI库配合模块化样式。通过这些方法,开发者能构建高效、可维护的SPA。【6月更文挑战第25天】
336 1
DBeaver,一款好用的开源数据库管理软件
DBeaver,一款好用的开源数据库管理软件
298 3
vue npm install安装插件请求github过慢问题
vue npm install安装插件请求github过慢问题
138 0
DenseMamba:大模型的DenseNet时刻,Mamba和RetNet精度显著提升
【2月更文挑战第25天】DenseMamba:大模型的DenseNet时刻,Mamba和RetNet精度显著提升
220 7
DenseMamba:大模型的DenseNet时刻,Mamba和RetNet精度显著提升
探索机器学习中的数据偏见及其影响
在机器学习领域,数据偏见是一个日益受到关注的问题。本文通过分析数据偏见的来源、表现和对模型性能的影响,旨在揭示如何识别和减少这种偏见。文章首先定义了数据偏见并探讨了其产生的原因,接着通过案例分析了偏见对模型决策的具体影响,最后提出了几种减轻数据偏见的策略。研究指出,虽然完全消除数据偏见是极其困难的,但通过合理的数据处理和算法设计可以显著降低其负面影响。
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
ENVI Classic:如何加载栅格数据(Img/DEM)和矢量数据(evf of ROI)?
1458 0
4大主流小程序平台介绍及其优缺点对比
小程序是一种轻量级应用程序,能够在手机上直接运行,无需下载安装,适用于一些简单的功能场景,如点餐、预约、查看天气等。以下是目前主流的小程序平台及其优缺点对比
2997 0
NR PRACH(一)Preamble的确定
因为具有良好的自相关性和互相关性,恒幅低峰均比等特性,使用Zaddof-Chu序列作为PRACH 信道的上行同步序列
全新语义分割方法SegViT | 沈春华老师团队提出全新语义分割方法(一)
全新语义分割方法SegViT | 沈春华老师团队提出全新语义分割方法(一)
725 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等