LeetCode Medium|【300. 最长递增子序列】
力扣题目链接
本题有一个简单的解法是动态规划,时间复杂度O(n^2),笔者在之前曾做过相关记录:300.最长递增子序列
现在我们来讨论 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))的解法
局部最优:如果我们希望上升子序列尽可能的长,则我们需要让序列上升得尽可能慢;
全局最优:最终遍历完整个数组,那么此时的序列长度为最长递增子序列。
所以有一个很直观的思路就出来了:
- 我们维护一个递增数组
d[i],其中i表示最长上升子序列的末尾元素的最小值; - 我们开始遍历整个数组,在遍历到 nums[i] 时:
- 如果
nums[i] > d[len],直接加入到 d 数组末尾,并且更新 len = len + 1; - 否则,在 d 数组中二分查找,找到一个比
nums[i]小的数d[k],并更新d[k +1] = nums[i]
- 如果
这里举一个例子:
对于序列[0, 8, 4, 12, 2],
-
第一步插入 0,d=[0];
-
第二步插入 8,d=[0,8];
-
第三步插入 4,d=[0,4];
-
第四步插入 12,d=[0,4,12];
-
第五步插入 2,d=[0,2,12]。
如果你能了解二分查找找到插入位置的话,此题非常简单
class Solution {
public:int lengthOfLIS(vector<int>& nums) {int n = nums.size();if (n == 0) {return 0; // 如果数组为空,返回 0}vector<int> d(n + 1, 0); // 用于存储最长递增子序列的数组int len = 1; // 当前 LIS 的长度d[len] = nums[0]; // 初始化第一个元素for (int i = 1; i < n; ++i) {if (nums[i] > d[len]) {// 如果 nums[i] 大于当前 LIS 的最后一个元素d[++len] = nums[i];} else {// 否则,在 d 数组中找到第一个大于或等于 nums[i] 的位置,并替换它int l = 1, r = len, pos = 0;while (l <= r) {int mid = (l + r) / 2;if (d[mid] < nums[i]) {pos = mid; // 找到小于 nums[i] 的最大位置l = mid + 1;} else {r = mid - 1;}}d[pos + 1] = nums[i]; // 替换位置 pos+1 处的值}}return len; // 返回最长递增子序列的长度}
};
相关文章:
LeetCode Medium|【300. 最长递增子序列】
力扣题目链接 本题有一个简单的解法是动态规划,时间复杂度 O(n^2),笔者在之前曾做过相关记录:300.最长递增子序列 现在我们来讨论 O ( n l o g ( n ) ) O(nlog(n)) O(nlog(n))的解法 局部最优:如果我们希望上升子序列尽可能的长&a…...
jenkins自动化构建docker镜像并上传至harbor仓库
1、插件下载 首先进入jenkins之后需要现在“Maven”、“GitLab”、“Jdk”、“SSH”、“Git”的相关插件,这里不再赘述,需要什么插件直接安装即可 搜索对应插件后选择直接安装即可 2、系统全局配置 2.1 Maven配置 配置maven安装的相应的setting文件 …...
Java高级Day23-HashMap
74.HashMap Map接口常用实现类:HashMap、Hashtable和Properties HashMap是Map接口使用频率最高的实现类 HashMap是以key-value对的方式来存储数据 key不能重复,但是值可以重复,允许使用null健和null值 如果添加相同的key,会覆…...
【学术会议征稿】第四届电气工程与计算机技术国际学术会议(ICEECT2024)
第四届电气工程与计算机技术国际学术会议(ICEECT2024) 2024 4th International Conference on Electrical Engineering and Computer Technology 第四届电气工程与计算机技术国际学术会议(ICEECT2024)将于9月27日-29日在哈尔滨举…...
Spring boot tomcat使用自定义线程池监控线程数量告警
Spring boot tocmat 使用自定义线程池 线程池 接近最大线程数量 警戒值告警 修改tomcat线程池中线程名字 配置文件上代码 server:port: 9898servlet:context-path: /testtomcat:connection-timeout: 5000max-connections: 5accept-count: 5 tomcat_thread_max_number_warn:…...
K8S子节点加入主节点访问MaterAPI报错:Unauthorized 401
问题场景: 本地测试由于之前安装过K8S今天重启无法使用了,于是重新安装了一下,子节点加入主节点报错: I0808 23:13:04.299356 19180 round_trippers.go:466] curl -v -XGET -H "Accept: application/json, */*" -H …...
C++ Poco服务端框架中JSON的使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、JSON是什么?二、使用步骤总结 前言 上面一篇文章教你学会了Poco开发服务端应用,这个教程教会你使用JSON。一般传JSON的时候都是POS…...
leetcode787. K 站中转内最便宜的航班——优先队列优化的Dijkstra算法+剪枝
题目 leetcode787. K 站中转内最便宜的航班 题目分析 给定一个城市图,每个城市通过航班与其他城市相连。每个航班都有一个起点、终点和价格。你需要找到从起点城市 src 到终点城市 dst 的最便宜路径,但这条路径最多只能经过 k 个中转站。你需要返回这…...
赛盈分销亮相AI科技大会暨亚马逊新增长大会,与企业共话跨境品牌发展新机遇!
八月开端,由知无不言与xmars和钱老师课堂联合主办的2024年AI科技大会暨亚马逊新增长大会在深圳宝安顺利开展,为期2天的跨境峰会吸引了上千位优秀的卖家朋友前来感受一场盛夏大狂欢。在本次跨境峰会里,邀请了多位不同领域的先锋人物࿰…...
Nacos-配置中心
1.为什么要使用配置中心? 2.常用的配置中心组件? 3.如何使用? 在配置中心创建配置文件 启动一个单列的nacos服务 点击发布 在微服务中使用 添加依赖 <!--nacso配置中心的依赖--><dependency><groupId>com.alibaba.cloud&l…...
ava中的文件操作、IO流、递归和字符集
目录 File类的使用 创建File对象 创建和删除文件 遍历文件夹 IO流 字节流 读取文件 字符流 读取文本文件 写入文本文件 递归 计算阶乘 文件搜索 字符集 编码与解码 File类的使用 在Java中,File类用于表示文件和目录的路径。它提供了一些方法来创建、删…...
生成式人工智能安全评估体系构建
文章目录 前言一、人工智能安全治理的现状1.1 国际安全治理现状1.2 国内安全治理现状二、构建人工智能安全评估体系1.1 需要对生成式人工智能技术的安全性、可靠性、可控性、公平性等维度进行全面的考量。1.2 应对生成式人工智能全维度风险。1.3 在体系化应对框架中,应明确法律…...
NRBO-XGBoost分类 基于牛顿-拉夫逊优化算法[24年最新算法]-XGBoost多特征分类预测+交叉验证
NRBO-XGBoost分类 基于牛顿-拉夫逊优化算法[24年最新算法]-XGBoost多特征分类预测交叉验证 多输入单输出) matlab代码 程序已调试好,无需更改代码替换数据直接使用!!!数据格式为excel格式!需要定制可私&a…...
synchronized实现原理及优化
一、概述 线程安全在并发编程中是重要关注点,造成线程安全问题的主要诱因有两个:一是存在共享数据(也称临界资源),二是存在多个线程共同操作共享数据。synchronized关键字能够保证在同一时刻只有一个线程可以执行某个…...
NLP 之词的表示与语言模型
表示的基本原理: 机器无法理解文字,却能进行复杂的数学运算——神经网络只要够深、够复杂,就能拟合足够复杂的数学模式。把文字嵌入(embed)到一个向量空间中去。 词表示(Word Representation)…...
每天一个数据分析题(四百七十一)- 假设检验
下列对假设检验的描述合理的是? A. 备择假设是研究者想收集证据予以支持的假设 B. 原假设是研究者想收集证据予以推翻的假设 C. 原假设是研究者想收集证据予以支持的假设 D. 备择假设是研究者想收集证据予以推翻的假设 数据分析认证考试介绍:点击进入 题目来…...
《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-04-数据访问层设计
文章目录 1. 五种数据访问模式1.1 在线访问1.2 DAO1.3 DTO1.4 离线数据模式1.5 对象/关系映射 (O/R Mapping) 2. 工厂方法模式在数据访问层应用3 ORM、Hibernate与CMP2.0设计思想3.1 ORM3.2 Hibernate1)概述2) Hibernate的架构(2023年的考题&…...
【视觉SLAM】 十四讲ch7习题
简介 本文主要内容是《视觉SLAM十四讲》(第二版)第7章的习题解答,并介绍了在解答习题中的一下思考和总结的经验。本文代码部分参考了:HW-of-SLAMBOOK2 1、除了本书介绍的ORB特征点,你还能找到哪些特征点?…...
K-近邻算法(二)
三、 kd 树 问题导⼊: 实现k 近邻算法时, 主要考虑的问题是如何对训练数据进⾏快速 k 近邻搜索。这在特征空间的维数⼤及训练数据容量⼤时尤其必要。 k 近邻法最简单的实现是线性扫描(穷举搜索),即要计算输⼊实例与…...
WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)
UniformGrid控件(均分布局) UniformGrid和Grid有些相似,只不过UniformGrid的每个单元格面积都是相等的,不管是横向的单元格,或是纵向的单元格,它们会平分整个UniformGrid。 UniformGrid控件提供了3个属性…...
保姆级教程:用华为ENSP模拟器搞定AC+AP直连式组网(Web界面全流程)
华为ENSP模拟器实战:从零搭建ACAP无线网络的全流程解析 第一次打开华为ENSP模拟器时,面对密密麻麻的图标和复杂的网络拓扑,很多初学者都会感到无从下手。特别是当需要配置AC控制器和AP接入点组成的无线网络时,Web界面里那些专业术…...
打造专属海拉鲁冒险:塞尔达传说旷野之息个性化存档编辑指南
打造专属海拉鲁冒险:塞尔达传说旷野之息个性化存档编辑指南 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 在塞尔达传说旷野之息的广阔世界中…...
GD32450i-EVAL开发实战:TLI接口配置与双图层应用解析
1. GD32450i-EVAL开发板与TLI接口初探 第一次拿到GD32450i-EVAL开发板时,那块480x272的RGB屏幕立刻吸引了我的注意。作为GD32F450芯片的官方评估板,它内置的TLI(TFT-LCD Interface)接口让图形显示开发变得异常简单。TLI接口本质上…...
极速配置APA第7版:学术效率工具效率指南
极速配置APA第7版:学术效率工具效率指南 【免费下载链接】APA-7th-Edition Microsoft Word XSD for generating APA 7th edition references 项目地址: https://gitcode.com/gh_mirrors/ap/APA-7th-Edition 在学术写作中,参考文献格式的规范是论文…...
micropython编译固件
虚拟机Oracle VirtualBox https://blog.csdn.net/weixin_42029523/article/details/144022677 新建-硬盘空间40GB-安装增强功能-其他 安装Ubuntu系统 如果共享文件夹需要连接,第一个share是win的文件夹,chen是虚拟机名字,share是虚拟机文件夹 sudo …...
Unity2018+TextMeshPro动态字体实战:解决中文生僻字渲染难题
Unity2018TextMeshPro动态字体实战:解决中文生僻字渲染难题 在游戏开发中,文字渲染的质量直接影响用户体验,特别是对于中文这种包含大量字符的语言来说,如何确保所有文字都能正确显示是一个常见的技术挑战。TextMeshPro作为Unity中…...
如何通过XUnity.AutoTranslator实现Unity游戏本地化:从入门到精通的实用指南
如何通过XUnity.AutoTranslator实现Unity游戏本地化:从入门到精通的实用指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款专为Unity游戏设计的开源自动翻译工具…...
利用Phi-4-mini-reasoning理解网络协议:模拟分析与故障排查推理
利用Phi-4-mini-reasoning理解网络协议:模拟分析与故障排查推理 1. 网络工程师的日常痛点 网络工程师小李最近遇到一个棘手问题:公司内部系统频繁出现"403 Forbidden"错误,导致多个部门无法正常访问关键业务系统。传统排查方法需…...
SQL数据库如何优雅地更新JSON格式字段_使用内置解析函数
MySQL 5.7 应用 JSON_SET 实现安全局部更新,仅修改指定路径值、自动创建缺失路径、避免NULL转字符串;PostgreSQL 需设 jsonb_set 第四参数为true才递归建空对象;SQLite老版本须应用层解析修改。MySQL 5.7 怎么用 JSON_SET 安全更新 JSON 字段…...
从安装到出图:Anything V5 Stable Diffusion 完整入门流程详解
从安装到出图:Anything V5 Stable Diffusion 完整入门流程详解 1. 环境准备与快速部署 1.1 系统要求 在开始使用Anything V5之前,请确保您的系统满足以下最低配置要求: 操作系统:Linux (推荐Ubuntu 20.04)GPU:NVID…...
