leetcode 354. 俄罗斯套娃信封问题(dp+二分)

给定一些标记了宽度和高度的信封,宽度和高度以整数对形式 (w, h) 出现。当另一个信封的宽度和高度都比这个信封大的时候,这个信封就可以放进另一个信封里,如同俄罗斯套娃一样。

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

说明:
不允许旋转信封。

示例:

输入: envelopes = [[5,4],[6,4],[6,7],[2,3]]
输出: 3
解释: 最多信封的个数为 3, 组合为: [2,3] => [5,4] => [6,7]。

解题思路

按照长度升序排列,保证了后面遍历的长度一定比前面大,所以只需要选择合适的宽度就可以了

代码

class Solution {public int maxEnvelopes(int[][] envelopes) {Arrays.sort(envelopes,(o1, o2) -> o1[0]==o2[0]?o2[1]-o1[1]:o1[0]-o2[0]);
//长度按升序排列,长度相等的则按宽度降序排列,防止【3,3】【3,4】这种类型序列出现使得二者同时被选择,导致违背题目条件int n=envelopes.length;List<Integer> list=new ArrayList<>();
//维护一个list,代表当前最优的信封选择序列list.add(envelopes[0][1]);for (int i = 1; i < n; i++) {int cur=envelopes[i][1];if(cur>list.get(list.size()-1)){//比选择序列末尾长度还要大的,则可以加进去list.add(cur);}else {int ret=bs(list,cur);//找到当前元素应该要放的位置,然后进行替换
//例如当前序列为1 3 5 当前元素为4,则将4放置成 1 2 4  list.set(ret,cur);}}return list.size();}public int bs(List<Integer> list,int tar){int l=0,r=list.size()-1;while (l<r){int mid=(r-l)/2+l;if(list.get(mid)<tar){l=mid+1;}else  r=mid;}return l;}
}

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

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

相关文章

fastlane use_legacy_build_api true

fastlane版本号&#xff1a;fastlane 1.108.0 Xcode版本号&#xff1a;8.1 MacOS版本号&#xff1a;10.12 使用fastlane打包 - Release / Ad-Hoc包时报错: [13:36:59]: There was an error exporting your application [13:36:59]: Unfortunately the new Xcode export API is …

获取所有权_住房所有权经济学深入研究

获取所有权Note from Towards Data Science’s editors: While we allow independent authors to publish articles in accordance with our rules and guidelines, we do not endorse each author’s contribution. You should not rely on an author’s works without seekin…

scala 单元测试_Scala中的法律测试简介

scala 单元测试Property-based law testing is one of the most powerful tools in the scala ecosystem. In this post, I’ll explain how to use law testing and the value it’ll give you using in-depth code examples.基于财产的法律测试是scala生态系统中最强大的工具…

getBoundingClientRect说明

getBoundingClientRect用于获取某个元素相对于视窗的位置集合。 1.语法&#xff1a;这个方法没有参数。 rectObject object.getBoundingClientRect() 2.返回值类型&#xff1a;TextRectangle对象&#xff0c;每个矩形具有四个整数性质&#xff08; 上&#xff0c; 右 &#xf…

robot:接口入参为图片时如何发送请求

https://www.cnblogs.com/changyou615/p/8776507.html 接口是上传图片&#xff0c;通过F12抓包获得如下信息 由于使用的是RequestsLibrary&#xff0c;所以先看一下官网怎么传递二进制文件参数&#xff0c;https://2.python-requests.org//en/master/user/advanced/#post-multi…

开发小Tips-setValue

字典添加数据请用 [dict setValue:value forKey:key] 代替 [dict setObject:value forKey:key] 复制代码这样在一些网络传参时不用考虑nil的情况&#xff0c;?

浏览器快捷键指南_快速但完整的IndexedDB指南以及在浏览器中存储数据

浏览器快捷键指南Interested in learning JavaScript? Get my JavaScript ebook at jshandbook.com有兴趣学习JavaScript吗&#xff1f; 在jshandbook.com上获取我JavaScript电子书 IndexedDB简介 (Introduction to IndexedDB) IndexedDB is one of the storage capabilities …

Java-Character String StringBuffer StringBuilder

Java Character 类 Character 类用于对单个字符进行操作character 类在对象包装一个基本类型char的值 char ch "a";char uniChar \u039A;char[] charArray {a, b, c};使用Character的构造方法创建一个Character类对象 Character ch new Character(a);Charact…

已知两点坐标拾取怎么操作_已知的操作员学习-第3部分

已知两点坐标拾取怎么操作有关深层学习的FAU讲义 (FAU LECTURE NOTES ON DEEP LEARNING) These are the lecture notes for FAU’s YouTube Lecture “Deep Learning”. This is a full transcript of the lecture video & matching slides. We hope, you enjoy this as mu…

缺失值和异常值处理

一、缺失值 1.空值判断 isnull()空值为True&#xff0c;非空值为False notnull() 空值为False&#xff0c;非空值为True s pd.Series([1,2,3,np.nan,hello,np.nan]) df pd.DataFrame({a:[1,2,np.nan,3],b:[2,np.nan,3,hello]}) print(s.isnull()) print(s[s.isnull() False]…

leetcode 503. 下一个更大元素 II(单调栈)

给定一个循环数组&#xff08;最后一个元素的下一个元素是数组的第一个元素&#xff09;&#xff0c;输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序&#xff0c;这个数字之后的第一个比它更大的数&#xff0c;这意味着你应该循环地搜索它的下一个更…

setNeedsDisplay看我就懂!

前言&#xff1a; setNeedsDisplay异步执行的。它会自动调用drawRect方法&#xff0c;这样可以拿到 UIGraphicsGetCurrentContext&#xff0c;就可以绘制了。而setNeedsLayout会默认调用layoutSubViews&#xff0c;处理子视图中的一些数据。 一、着手 我定义了一个UIView的子类…

如何使用ArchUnit测试Java项目的体系结构

by Emre Savcı由EmreSavcı 如何使用ArchUnit测试Java项目的体系结构 (How to test your Java project’s architecture with ArchUnit) In this post, I will show you an interesting library called ArchUnit that I met recently. It does not test your code flow or bu…

解决ionic3 android 运行出现Application Error - The connection to the server was unsuccessful

在真机上启动ionic3打包成的android APK,启动了很久结果弹出这个问题&#xff1a; Application Error - The connection to the server was unsuccessful 可能是我项目资源太多东西了&#xff0c;启动的时间太久了&#xff0c;导致超时了。 解决方案是在项目目录下的config.xml…

特征工程之特征选择_特征工程与特征选择

特征工程之特征选择&#x1f4c8;Python金融系列 (&#x1f4c8;Python for finance series) Warning: There is no magical formula or Holy Grail here, though a new world might open the door for you.警告 &#xff1a; 这里没有神奇的配方或圣杯&#xff0c;尽管新世界可…

搭建Harbor企业级docker仓库

https://www.cnblogs.com/pangguoping/p/7650014.html 转载于:https://www.cnblogs.com/gcgc/p/11377461.html

leetcode 131. 分割回文串(dp+回溯)

给你一个字符串 s&#xff0c;请你将 s 分割成一些子串&#xff0c;使每个子串都是 回文串 。返回 s 所有可能的分割方案。 回文串 是正着读和反着读都一样的字符串。 示例 1&#xff1a; 输入&#xff1a;s “aab” 输出&#xff1a;[[“a”,“a”,“b”],[“aa”,“b”]]…

[翻译练习] 对视图控制器压入导航栈进行测试

译自&#xff1a;swiftandpainless.com/testing-pus… 上个月我写的关于使用 Swift 进行测试驱动开发的书终于出版了&#xff0c;我会在本文和接下来的一些博文中介绍这本书撰写过程中的一些心得和体会。 在本文中&#xff0c;我将会展示一种很好的用来测试一个视图控制器是否因…

python多人游戏服务器_Python在线多人游戏开发教程

python多人游戏服务器This Python online game tutorial from Tech with Tim will show you how to code a scaleable multiplayer game with python using sockets/networking and pygame. You will learn how to deploy your game so that people anywhere around the world …

版本号控制-GitHub

前面几篇文章。我们介绍了Git的基本使用方法及Gitserver的搭建。本篇文章来学习一下怎样使用GitHub。GitHub是开源的代码库以及版本号控制库&#xff0c;是眼下使用网络上使用最为广泛的服务&#xff0c;GitHub能够托管各种Git库。首先我们须要注冊一个GitHub账号&#xff0c;打…