牛客NC153 信封嵌套问题【中等 动态规划,最长递增子序列 Java,Go,PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/9bf77b5b018d4d24951c9a7edb40408f

相同的题目:
https://www.lintcode.com/problem/602

思路

	本质是求最长子序列问题envelopes 先按 w 升序排序,再按 h 降序 排序,只需考虑h即可,因为w已经升序排列好,因为h大的在前,所以相同的w下的不同h,只会选择最大的那个h。就可以将问题转换为 h 的 Longest Increasing subSequence对参数长度升序,宽度降序排序因为长度和宽度都要大于才能装进去比如:int[][] arr = {{5,4},{6,4},{6,7},{2,3}};//2,3  5,4  6,7  6,4求的就是 3 4 7 4  最长递增子序列问题

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param letters int整型二维数组* @return int整型*/public int maxLetters (int[][] letters) {Arrays.sort(letters, new Comparator<int[]>() { //长升序,长相同,宽降序@Overridepublic int compare(int[] a, int[] b) {if(a[0] !=b[0]){return a[0]-b[0];}else{return b[1]-a[1];}}});int[] dp = new int[letters.length];Arrays.fill(dp,1);//宽度 最长上升子序列问题int ans = 1;for (int i = 0; i <letters.length ; i++) {for (int j = i-1; j >=0 ; j--) {if(letters[j][1]<letters[i][1]){dp[i] = Math.max(dp[i],dp[j]+1);}ans =Math.max(dp[i],ans);}}return ans;}
}

参考答案Go

package main
import "sort"/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param letters int整型二维数组* @return int整型*/
func maxLetters(letters [][]int) int {//本质是最递增子序列问题//长度升序,相同长度,宽度降序sort.Slice(letters, func(i int, j int) bool {if letters[i][0] != letters[j][0] {return letters[i][0] < letters[j][0]} else {return letters[i][1] > letters[j][1]}})//高度的最长上升子序列问题dp := make([]int, len(letters))ans := 1for i := 0; i < len(letters); i++ {dp[i] = 1for j := i - 1; j >= 0; j-- {if letters[j][1] < letters[i][1] {cur := dp[j] + 1if cur > dp[i] {dp[i] = cur}if ans < dp[i] {ans = dp[i]}}}}return ans
}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param letters int整型二维数组 * @return int整型*/
function maxLetters( $letters )
{usort($letters,function ($a,$b){if($a[0] !=$b[0]){ //长度升序return $a[0]-$b[0];} else{//长度一样,宽度降序return $b[1]-$a[1];}});//长度的最长上升子序列问题$dp = array();$ans =1;for($i=0;$i<count($letters);$i++){$dp[$i] =1;for($j=$i-1;$j>=0;$j--){if($letters[$j][1] < $letters[$i][1]){$cur =$dp[$j]+1;if($dp[$i] < $cur){$dp[$i] =$cur;if($cur>$ans){$ans =$cur;}}}}}return $ans;
}

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

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

相关文章

一条SQL在MySQL中的执行过程

图解&#xff1a; 第⼀步&#xff1a;连接器 过程 1. 建⽴连接&#xff1a;与客户端进⾏ TCP 三次握⼿建⽴连接&#xff1b; 2. 校验密码&#xff1a;校验客户端的⽤户名和密码&#xff0c;如果⽤户名或密码不对&#xff0c;则会报错&#xff1b;3. 权限判断&#xff1a…

手机无线投屏到windows11电脑

1 安装无线投影组件 2 电脑端打开允许其他设备投影的开关 3 手机找到投屏选项 4 手机搜索可用设备连接即可 这里的官方文档给的不太好,给了一些让人眼花撩乱的信息,以下是经过整合的有效信息

Appium基础操作元素定位实操入门

一、基础操作 1、安装和配置:包括安装 Appium 服务器、设置环境变量等。2、启动服务器:使用命令行或相关工具启动 Appium 服务器。3、连接设备或模拟器:将测试设备或模拟器连接到计算机上。4、识别应用程序:指定要测试的应用程序的相关信息,如包名和活动名。上述1~4内容可…

金融衍生品市场

金融衍生品市场 衍生金融品的作用衍生金融工具远期合约期货合约期权 衍生金融品的作用 套期保值&#xff08;Hedging&#xff09; 组合多头头寸(long position)与空头头寸(short position)例&#xff1a;股票与股指期货 投机 衍生金融工具 远期合约 定义&#xff1a;在将来…

翻译: 硅谷软件工程师面试:准备所需的一切

没有人有时间去做成百上千道LeetCode题目&#xff0c;好消息是你实际上并不需要做那么多题目就能够在FAANG公司找到工作&#xff01; 我曾经在Grab工作&#xff0c;这是东南亚的一家共享出行公司&#xff0c;但我对工作感到沮丧&#xff0c;想要进入FAANG公司&#xff0c;但我…

【opencv】教程代码 —features2D(5)旋转相机的基本全景拼接

基本全景拼接 panorama_stitching_rotating_camera.cpp 将第二张图像进行透视变换后与第一张图像拼接 #include <iostream> // 包含了一些用于输入输出的函数 #include <opencv2/core.hpp> // 包含了OpenCV核心库的一些常用类和函数 #include <opencv2/imgpro…

ZooKeeper 宕机如何应对

ZooKeeper 本身也是集群&#xff0c;推荐配置奇数个服务器。因为宕机就需要选举&#xff0c;选举需要半数 1 票才能通过&#xff0c;为了避免打成平手。进来不用偶数个服务器。 如果是 Follower 宕机了&#xff0c;没关系不影响任何使用。用户无感知。如果 Leader 宕机&#x…

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局

Android视角看鸿蒙第十课-鸿蒙的布局之线性布局 导读 这篇文章开始&#xff0c;依次学习鸿蒙的八大布局&#xff0c;这是第一篇&#xff0c;所以顺带也会聊聊通用属性。 文档地址 文档地址 如何定义一个线性布局 Android中是使用LinearLayout来构建线性布局的&#xff0c…

ChatGPT chrome扩展下载与安装

官方下载地址 https://chromewebstore.google.com/detail/lpbhmlbicmgjpacbofijdfpcplfhakeo 截图 安装 离线安装 下载地址 https://static.xutongbao.top/app/chatgpt-chrome-crx-v0.0.7.zip 打开链接 chrome://extensions/ 人工智能学习网站 https://chat.xutongbao.to…

谷粒商城——RabbitMQ

0. 消息中间件 1.RabbitMQ的核心概念 2. 工作流程 整体架构&#xff1a; 相关细节&#xff1a; 上述要注意的是&#xff1a; 路由键包含在message的头中&#xff0c;其作用是用于指定该消息存储与哪个消息队列中。 信道是客户端&#xff08;包括生产者和消费者&#xff09;用…

Vue 组件化编程

Vue 组件化编程 非单文件组件 定义组件 使用Vue.extend(options&#xff09;创建 不要写eldata要写成函数&#xff0c;避免组件被复用时&#xff0c;数据存在引用关系 注册组件 局部注册&#xff1a;new Vue()的时候&#xff0c;options传入components全局注册&#xff1a;V…

使用OpenSSL工具验证证书

验证证书的原理涉及到公开密钥基础设施&#xff08;Public Key Infrastructure, PKI&#xff09;和数字证书的加密原理。以下是验证证书文件的基本原理和步骤&#xff1a; 证书组成&#xff1a;SSL 证书通常包含公钥、证书所有者的信息、证书颁发机构&#xff08;Certificate A…

回收站删除以后还能撤销吗 回收站删除以后怎么找回 回收站清空了怎么恢复 easyrecovery数据恢复软件

回收站删除以后能撤销吗&#xff1f;有不少网友前一秒清空回收站&#xff0c;后一秒就开始在网上疯狂搜寻如何撤销删除回收站的办法。实际上&#xff0c;清空回收站并不可怕&#xff0c;被删除的数据仍然保存在我们的电脑硬盘中。今天我为大家介绍回收站删除以后怎么找回数据的…

HTTP 常见面试题(计算机网络)

HTTP 基本概念 一、HTTP 是什么&#xff1f; HTTP(HyperText Transfer Protocol) &#xff1a;超文本传输协议。 HTTP 是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超文本」数据的「约定和规范」。 「HTTP 是用于从互联网服务器传输超文本到本…

苍穹外卖04 (新增内表的外键id获取,多表分页查询,多表批量删除,修改先查在改内表外键id用主表的,起售时包含了“停售”状态的外关联表)

1. 新增套餐 1 需求分析和设计 业务规则&#xff1a; 套餐名称唯一 套餐必须属于某个分类 套餐必须包含菜品 名称、分类、价格、图片为必填项 添加菜品窗口需要根据分类类型来展示菜品 新增的套餐默认为停售状态 2 代码实现 1 根据分类id查询菜品 DishControllerGetMa…

【C语言环境】Sublime中运行C语言时MinGW环境的安装

要知道&#xff0c;GCC 官网提供的 GCC 编译器是无法直接安装到 Windows 平台上的&#xff0c;如果我们想在 Windows 平台使用 GCC 编译器&#xff0c;可以安装 GCC 的移植版本。 目前适用于 Windows 平台、受欢迎的 GCC 移植版主要有 2 种&#xff0c;分别为 MinGW 和 Cygwin…

HTTP 协议中常用的两种请求方法:get请求与post请求

一、get请求 &#xff08;1&#xff09;什么是 GET 请求&#xff1f; GET 请求是一种向服务器请求获取资源的方式。它通过 URL 将请求参数附加到请求中&#xff0c;并将请求发送给服务器。GET 请求通常用于获取数据&#xff0c;例如读取文章、获取用户信息等操作。 在Node.j…

数据分析之POWER BI Desktop可视化应用案列

在power bi中导入数据 导入前期建好的模型 简单介绍&#xff08;power bi desktop&#xff09; 将右边字段全部展开 各类数据 所作的模型 在excel中是单向的&#xff0c;power bi 中可以是双向的 右键单击----点击属性 选择两个---在两个方向上应用安全筛选器 变为双向的…

每日面经分享(pytest入门)

1. pytest具有什么功能 a. 自动发现和执行测试用例&#xff1a;pytest可以自动发现项目中的测试文件和测试函数&#xff0c;无需手动编写测试套件或测试运行器。 b. 丰富的断言函数&#xff1a;pytest提供了丰富的断言函数&#xff0c;方便地验证测试结果是否符合预期。断言函…

JQuery的定义

jQuery是一个js库&#xff0c;使用jQuery会比js简单一点 jQuery文件是一个自执行函数 jQuery文件是一个自执行函数 $传递的参数不同&#xff0c;效果也不同&#xff1a; 传递的是匿名函数&#xff0c;那$就是一个入口函数&#xff0c;传递的是一个字符串&#xff0c;那$就…