21 俄罗斯套娃信封问题

问题描述,给你一个二维数组envelopes,其中envelopes[i]=[wi,hi].表示第i个信封的宽度和高度,当另一个信封的宽度和噶度都比这个信封大的时候就可以放进另一个信封里,如同俄罗斯套娃一样。请计算最多能有多少个信封能组成一套“俄罗斯套娃一样”

问题分析求解:要求w和h都要求从大到小进行排列,可以先依据w进行升序排列,而后求解排列后的数组h的最大上升子序列即可,上升子序列可以采用动态规划dp[i]表示以i结尾的最大上升子序列长度,在一个循环中求最值

pubic int MaxEnvelope(int [][]envelopes)
{
//首先对于envelopes的每个元素进行排序
Arrays.sort(envelopes,(int[]arr1,int[]arr2)->
{
if(arr1[0]==arr2[0])
{
return arr1[1]-arr2[1];
}else
{
return arr1[0]-arr2[1];
}
});
//使用动态规划求解
int []dp=new int[envelopes.length];
dp[0]=1;
Arrays.fill(dp,1);
int max=Integer.MIN_VALUE;
for(int i=1;i<envelopes.length;i++)
{
for(int j=i-1;j>0;j--)
{
if(envelopes[i][1]>envelopes[j][1])
{
dp[i]=Math.max(dp[j]+1,dp[i]);
max=Math.max(max,dp[i]);
}
}
}
​​​​​​​return max;
}

使用单调栈进行优化,由于是求最长递增子列,从而可以进行求解

public int maxEnvelope(int[][]envelopes)
{
Arrays.sort(envelopes,(int[]arr1,int[]arr2)->
{
if(arr1[0]==arr2[0])
{
return arr1[1]-arr2[1];
}else
{
return arr1[0]-arr2[0];
}
});
List<Integer> list=new LinkedList<>(envelopes.length);
list.add(envelopes[0][1]);
for(int i=1;i<envelopes.length;i++)
{
if(envelopes[i][1]>list.get(list.size()-1))
{
list.add(envelopes[i][1]);
}else
{
int index=Collections.binarySearch(list,envelopes[i][1]);
if(index>0)
{
list.set(index,envelopes[i][1]);
}
else
{
list.set(-index-1,envelopes[i][1]);
}
}
}
return list.size();
}

新知识总结:申请一个链表 LinkedList<Interger>list=new LinkedList<>(nums.length);数组排序Arrays.sort(int[][],(int[],int[])->{})或Arrays.sort(int[],(int,int)->{}),数组填充,Arrays.fill(int[],value);
链表插入list.add(),链表替换list.set(index,value);二分法查找,Collections.binarySearch(list,value),若存在则返回整数,若不存则返回复数,通过(-index-1)可以找到第一个大于其的位置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200179.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Debugging Application Engine Programs 调试应用程序引擎程序

Debugging Application Engine Programs 调试应用程序引擎程序 This section discusses how to: 本节讨论如何&#xff1a; Enable the Application Engine debugger.启用应用程序引擎调试器。Set debugging options.设置调试选项。 Enabling the Application Engine Debu…

Java数组面试题

Java数组面试题 1. 创建一个包含多个元素的数组&#xff0c;并打印输出数组的内容。 public class Main {public static void main(String[] args) {String[] array {"apple", "banana", "orange"};for (String element : array) {System.out…

微服务实战系列之J2Cache

前言 经过近几天陆续发布Cache系列博文&#xff0c;博主已对业界主流的缓存工具进行了基本介绍&#xff0c;当然也提到了一些基本技巧。相信各位盆友看见这么多Cache工具后&#xff0c;在选型上一定存在某些偏爱: A同学说&#xff1a;不管业务千变万化&#xff0c;我对Redis的…

【华为OD题库-070】数列描述-java

题目 题目描述: 有一个数列A[n]&#xff0c;从A[0]开始每一项都是一个数字&#xff0c;数列中A[n1]都是A[n]的描述&#xff0c;其中A[0]1&#xff0c;规则如下; A[0]:1 A[1]:11 含义其中A[0]1是1个1即11&#xff0c;表示A[0]从左到右连续出现了1次1 A[2]:21 含义其中A[1]11是2个…

企业如何制定精准营销策略?

在当今的数字化时代&#xff0c;位置数据已经成为企业营销策略中不可或缺的一部分。通过收集和分析客户的位置数据&#xff0c;企业可以更好地了解客户的行为和需求&#xff0c;制定更精准的营销策略&#xff0c;从而提高营销效率。 首先&#xff0c;利用IP地址位置数据可以帮助…

手搓图片滑动验证码_JavaScript进阶

手搓图片滑动验证码 背景代码效果图展示网站 背景 在做前端项目开发的时候&#xff0c;少不了登录注册部分&#xff0c;既然有登录注册就少不了机器人验证&#xff0c;验证的方法有很多种&#xff0c;比如短信验证码、邮箱验证码、图片滑动、图片验证码等。 由于鄙人在开发中…

9个Logo素材超多的Logo网站!

Logo 虽然看起来很简单&#xff0c;但是设计过程中的每一个细节都很精致。因为 Logo 作为品牌的象征&#xff0c;应该一目了然地传达给人们品牌的理念和形象。本文给大家整理了 7 个 Logo 素材网站和 2 个 Logo 在线制作网站。可以收集很多关 Logo 设计的内容和技巧&#xff01…

吉他初学者学习网站搭建系列(5)——如何做一个在线节拍器

文章目录 背景实现TransportLoop代码 在线尝试 背景 我们看吉他谱时&#xff0c;经常看到拍号&#xff0c;例如6/8。它的含义是一拍是一个八分音符&#xff0c;一小节有六拍。四分音符的时长是一秒&#xff0c;即60拍/分钟。基于这样的背景知识&#xff0c;我们就可以根据一些…

决策树 C4.5算法

C4.5算法 C4.5算法 C4.5 算法是 Ross 对ID3 算法的改进用信息增益率来选择属性。ID3选择属性用的是子树的信息增益而C4.5用的是信息增益率在决策树构造过程中进行剪枝对非离散数据也能处理能够对不完整数据进行处理 信息增益比&#xff08;C4.5&#xff09; g R ( D , A ) …

Leetcode 第 110 场双周赛 Problem D 2809. 使数组和小于等于 x 的最少时间(DP+贪心+正难则反)

Leetcode 第 110 场双周赛 Problem D 2809. 使数组和小于等于 x 的最少时间&#xff08;DP 好题&#xff09;题目 给你两个长度相等下标从 0 开始的整数数组 nums1 和 nums2 。每一秒&#xff0c;对于所有下标 0 < i < nums1.length &#xff0c;nums1[i] 的值都增加 num…

supervisor管理python进程

前言 平时开发调试中使用conda环境&#xff0c;项目比较多环境多&#xff0c;而且命令繁杂&#xff0c;每一次启动项目都可能会因为忘记启动方式而频繁报错。现在可以通过supervisor来管理&#xff0c;只需要配置几个文件&#xff0c;就可以轻松通过简单一致的命令启动工程&…

C++ day55 判断子序列 不同的子序列

题目1&#xff1a;392 判断子序列 题目链接&#xff1a;判断子序列 对题目的理解 判断字符串s是否为t的子序列 字符串s和字符串t的长度大于等于0&#xff0c;字符串s的长度小于等于字符串t的长度&#xff0c;本题其实和最长公共子序列的那道题很相似&#xff0c;相当于找两…

HashMap相关专题

前置知识&#xff1a;异或运算 异或运算介绍 异或有什么神奇之处&#xff08;应用&#xff09;&#xff1f; &#xff08;1&#xff09;快速比较两个值 &#xff08;2&#xff09;我们可以使用异或来使某些特定的位翻转&#xff0c;因为不管是0或者是1与1做异或将得到原值的相…

IntelliJ IDEA 2023.2新特性详解第三弹!Docker、Kubernetes等支持!

9 Docker 在 Docker 镜像层内预览文件 现在可以在 Services&#xff08;服务&#xff09;工具窗口中轻松访问和预览 Docker 镜像层的内容。 从列表选择镜像&#xff0c;选择 Show layers&#xff08;显示层&#xff09;&#xff0c;然后点击 Analyze image for more informati…

ES6对象

1.对象简写 ES6中规定可以直接在对象中写入变量和函数作为对象的属性和方法&#xff0c;此时属性名为变量名, 属性值为变量的值。对象简写在未来的使用频率极其高。 let namelarry;let age12;let obj{name,age,//es5 sayName:function(){}// sayName(){// console.log(t…

<软考>软件设计师-2操作系统(总结)

(一) 进程管理 1 操作系统概述 1-1 操作系统定义: 能有效地组织和管理系统中的各种软/硬件资源&#xff0c;合理地组织计算机系统工作流程&#xff0c;控制程序的执行&#xff0c;并且向用户提供一个良好的工作环境和友好的接口。 1-2 操作系统的作用: 1 通过资源管理提高计…

7+WGCNA+机器学习+实验+泛癌分析,多要素干湿结合

今天给同学们分享一篇生信文章“Analysis and Experimental Validation of Rheumatoid Arthritis Innate Immunity Gene CYFIP2 and Pan-Cancer”&#xff0c;这篇文章发表在Front Immunol期刊上&#xff0c;影响因子为7.3。 结果解读&#xff1a; DEG筛选和数据预处理 数据在…

Helplook VS Google Docs:一对一比较

还记得Google Docs在2006年一炮走红的时候吗&#xff1f;它很大程度地改变了协作方式&#xff0c;也减少了附加文件和频繁保存的麻烦。相比Microsoft Word&#xff0c;很多人更喜欢Google Docs的简单性。 但是时代也在不断地发展。像HelpLook这样的新竞争对手也可以提供先进的…

设计模式总目录

目录 设计模式 1. 创建型模式 1.1 工厂方法模式 1.2 抽象工厂模式 1.3 单例模式 1.4 建造者模式 1.5原型模式 2. 结构型模式 2.1 适配器模式 2.2 装饰器模式 2.3 代理模式 2.4 外观模式 2.5 桥接模式 2.6 组合模式 2.7 享元模式 3. 行为型模式 3.1 策略模式 …

字符集——带你了解UTF-8的前世今生

文章目录 字符集的来历汉字和字母的编码特点Unicode字符集字符集小结编码和解码开发约定 字符集的来历 计算机是美国人发明的&#xff0c;由于计算机能够处理的数据只能是0和1组成的二进制数据&#xff0c;为了让计算机能够处理字符&#xff0c;于是美国人就把他们会用到的每一…