LeetCode刷题之HOT100之最长递增子序列

2024/7/10 晴,睡眠质量良好,到实验室时间9.18。知了在窗外聒噪,似乎让我安心,静下来。做题吧

1、题目描述

在这里插入图片描述

2、算法分析

给一个整数数组,要求出里面最长严格递增子序列的长度。遇到这种问题,想到的就是DP算法,将大的问题转化成小问题,再递归。算法思路:

  1. 定义状态
    首先,我们定义一个数组 dp,其中 dp[i] 表示以 nums[i]结尾的最长递增子序列的长度。这个状态定义是动态规划问题的关键,它允许我们通过已解决的小问题(即子问题)来逐步构建出原问题的解。
  2. 初始化状态
    由于每个元素至少可以自成一个递增子序列,因此我们将 dp 数组的所有元素初始化为 1。特别地,dp[0] 也被初始化为1,因为数组的第一个元素本身就构成了一个长度为 1 的递增子序列。
  3. 状态转移方程
    对于数组中的每个元素 nums[i](从索引 1 开始遍历,因为索引 0 已经初始化),我们检查它之前的所有元素
    nums[j](其中 j0i-1)。如果 nums[i] > nums[j],则说明我们可以将 nums[i] 加到以nums[j] 结尾的递增子序列的末尾,从而形成一个更长的递增子序列。此时,我们需要更新 dp[i]dp[j] + 1dp[i] 之间的较大值,以确保 dp[i] 总是存储以 nums[i] 结尾的最长递增子序列的长度。

状态转移方程可以表示为:

dp[i] = max(dp[i], dp[j] + 1) if nums[i] > nums[j]
  1. 记录结果 在遍历过程中,我们还需要记录一个全局的最大值 maxRes,用于存储遍历到目前为止找到的最长递增子序列的长度。每次更新dp[i] 后,我们都将其与 maxRes 进行比较,并更新 maxRes 为较大值。
  2. 返回结果 遍历完整个数组后,maxRes 中存储的就是整个数组的最长递增子序列的长度,我们将其作为函数的返回值。

3、代码

public int lengthOfLIS(int[] nums) {// 如果数组为空,则最长递增子序列的长度为0if(nums.length == 0){return 0;}// 创建一个dp数组来存储以每个元素为结尾的最长递增子序列的长度  // dp[i]表示以nums[i]为结尾的最长递增子序列的长度int[] dp = new int[nums.length];// 初始化dp数组,因为每个元素至少可以自成一个递增子序列dp[0] = 1;// 初始化最长递增子序列的长度为1(至少包含自身)int maxRes = 1;// 遍历数组中的每个元素(除了第一个元素,因为已经初始化)for(int i = 1; i < nums.length; i++){// 初始化dp[i]为1,因为每个元素至少可以自成一个递增子序列dp[i] = 1;// 遍历当前元素之前的所有元素for(int j = 0; j < i; j++){// 如果当前元素大于之前的某个元素,说明可以将当前元素添加到以nums[j]为结尾的递增子序列之后  // 从而形成一个更长的递增子序列  if(nums[i] > nums[j]){// 更新dp[i]为当前已找到的最长递增子序列长度+1和dp[i]中的较大值 dp[i] = Math.max(dp[i], dp[j] + 1);}}// 更新最长递增子序列的长度,取当前遍历过的所有dp[i]中的最大值maxRes = Math.max(maxRes, dp[i]);}// 返回最长递增子序列的长度return maxRes;}

4、复杂度分析

  • 时间复杂度 O ( n 2 ) O(n^{2}) O(n2),其中 n 为数组 nums 的长度。动态规划的状态数为 n,计算状态 dp[i] 时,需要 O(n)
    的时间遍历 dp[0…i−1] 的所有状态,所以总时间复杂度为 O ( n 2 ) O(n^{2}) O(n2)
  • 空间复杂度:O(n),需要额外使用长度为 ndp 数组。

还有一个二分的算法就不写了啦!dp思想好好理解就可以啦!拜拜啦!

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【逆向基础】九、dnSpy使用技巧随记

一、dnSpy逆向工具的使用 1、反汇编适用范围&#xff1a;C#,.NET等语言编写的程序 2、工具的获取&#xff1a;dnSpy (ps:大家可自行去网页搜索下载最新版) 3、打开需要反汇编的程序&#xff0c;成功后出现如图所示的界面 4、dnSpy反汇编.NET程序后&#xff0c;可以像开发一样…

算术运算符用途解析及应用案例

文章目录 常用的算术运算符及其用途&#xff1a;运算符优先级类型转换高级用法 应用案例1. 计算器程序2. 平方根计算3. 计算平均数和标准差4. 货币兑换5. 计算几何6. 动力学模拟7. 数字图像处理8. 金融计算&#xff1a;复利计算 常用的算术运算符及其用途&#xff1a; 算术运算…

怎么简单快捷的分享文件呢?扫描二维码看文件的制作方法

怎么简单快捷的分享文件呢&#xff1f;想要快速的实现文件分享&#xff0c;那么可以将文件转成二维码之后&#xff0c;通过分享二维码让其他人扫码在手机上查看文件&#xff0c;可以将单个文件或者多个文件生成二维码&#xff0c;扫描点击文件就能够在手机上预览或者下载文件。…

【JavaScript】深入理解Promise:从基础概念到进阶用法、手写promise

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、Promise概述1. Promise的定义2. Promise的用途3. Promise的三种状态4. Promise的构造函数和基础结构5. Promise的优点6. Promise的实例方法7. Promise的静态方法 三、Promise的基本用法1. 创建一个Promise2. th…

居家客服人员分散,更需要统一客服话术

1、居家客服服务需求激增 近年来&#xff0c;随着线上消费的兴起&#xff0c;以及客服人员成本的不断攀升&#xff0c;越来越多的企业选择雇佣居家客服&#xff0c;以客服服务发包的形式接待客户的咨询。因此&#xff0c;居家客服人员的数量也逐渐增加。然而&#xff0c;居家办…

【探索Linux】P.38(传输层 —— TCP协议通信连接管理机制简介 | TCP连接状态转换)

阅读导航 引言一、TCP协议通信连接管理机制二、连接状态转换1. TCP状态转换图2. 状态转换过程3. 理解TIME_WAIT状态&#xff08;1&#xff09;目的和作用&#xff08;2&#xff09;状态转换&#xff08;3&#xff09;特殊情况&#xff08;4&#xff09;影响和优化 4. 理解 CLOS…

纯技术分享:淘宝商品详情原数据接口参数解析

item_get_app-获得淘宝app商品详情原数据 公共参数 名称类型必须描述keyString是调用key&#xff08;必须以GET方式拼接在URL中&#xff09;secretString是调用密钥api_nameString是API接口名称&#xff08;包括在请求地址中&#xff09;[item_search,item_get,item_search_s…

【React】Ant Design -- Table分页功能实现

实现步骤 为Table组件指定pagination属性来展示分页效果在分页切换事件中获取到筛选表单中选中的数据使用当前页数据修改params参数依赖引起接口重新调用获取最新数据 const pageChange (page) > {// 拿到当前页参数 修改params 引起接口更新setParams({...params,page})…

免费GPU——Google Colab使用

免费GPU——Google Colab使用 1、创建新的Notebook 网址&#xff1a;https://colab.research.google.com/ 点击“新建笔记本”进行创建 2、设置免费GPU 点击“更改运行时类型”&#xff0c;打开界面如下所示&#xff1a; 选择“T4 GPU”&#xff0c;然后“保存”即可使用…

通用图形处理器设计GPGPU基础与架构(一)

GPGPU背景 GPGPU&#xff08;General Purpose Graphics Processing Unit&#xff0c;通用图形处理器&#xff09;脱胎于GPU (Graphics Processing Unit&#xff0c;图形处理器&#xff09;。GPGPU由于其强大的运算能力和高度灵活的可编程性&#xff0c;已经成为深度学…

大模型应用中什么是SFT(监督微调)?

大模型应用中什么是SFT&#xff08;监督微调&#xff09;&#xff1f; 一、SFT的基本概念 监督微调&#xff08;Supervised Fine-Tuning, SFT&#xff09;是对已经预训练的模型进行特定任务的训练&#xff0c;以提高其在该任务上的表现。预训练模型通常在大量通用数据上进行训…

模型和应用,哪个更重要?

前言 2024 年 7 月 4 日&#xff0c;世界人工智能大会暨人工智能全球治理高级别会议全体会议在上海世博中心举行。百度创始人李彦宏在产业发展主论坛上发言&#xff0c;呼吁不要卷模型&#xff0c;要卷应用。 目录 四个要点 积极的观点 不合理性 总结 四个要点 李彦宏的呼吁…

【经典链表OJ】环形链表

一、题目要求 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&…

2024年上海市安全员C3证证考试题库及上海市安全员C3证试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年上海市安全员C3证证考试题库及上海市安全员C3证试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人员上岗证考试…

ATA-M4功率放大器在充粘液管道损伤检测中的应用

实验名称&#xff1a;充粘液管道损伤检测 实验原理&#xff1a;在管道上的传感器激发一束超声能量脉冲&#xff0c;此脉冲沿着管道长度方向向远处传播&#xff0c;并充斥整个圆周方向&#xff0c;在导波传播过程中遇到缺陷时&#xff0c;入射波会在缺陷处发生反射、透射&#x…

视频怎么压缩变小?最佳视频压缩器

即使在云存储和廉价硬盘空间时代&#xff0c;大视频文件使用起来仍然不方便。无论是存储、发送到电子邮件帐户还是刻录到 DVD&#xff0c;拥有最好的免费压缩软件可以确保您快速缩小文件大小&#xff0c;而不必担心视频质量下降。继续阅读以探索一些顶级最佳 免费视频压缩器选项…

不同深度的埋点事件如何微妙地改变广告系列的成本

/ 作者简介 / 本篇文章来自现金贷领域市场投放大佬 亮哥 的投稿&#xff0c;主要分享了在广告投放过程中&#xff0c;不同深度的埋点事件如何微妙地改变广告系列的成本的相关经验&#xff0c;相信会对大家有所帮助&#xff01;同时也感谢作者贡献的精彩文章。 / 前言 …

多模态大模型时代下的文档图像智能分析与处理_多模态ocr

0. 前言1. 人工智能发展历程 1.1 传统机器学习1.2 深度学习1.3 多模态大模型时代 2. CCIG 文档图像智能分析与处理论坛 2.1 文档图像智能分析与处理的重要性和挑战2.2 文档图像智能分析与处理高峰论坛2.3 走进合合信息 3. 文档图像智能分析与处理 3.1 文档图像分析与预处理3.2 …

AI副业 | AI绘画+对话,轻松涨粉变现!(附教程)

最近有一个超有趣、超简单的创作形式火了起来&#xff0c;那就是“AI绘画搭配对话”。不需要复杂的技巧&#xff0c;只需要一个形象&#xff0c;加上一段生动的对话&#xff0c;就能轻松吸引无数眼球&#xff01; 首先&#xff0c;挑选一个可爱的形象&#xff0c;它可能是你心仪…

MySQL体系架构解析

1.MySQL体系架构 1.1.MySQL的分支与变种 MySQL变种有好几个,主要有三个久经考验的主流变种:Percona Server,MariaDB和 Drizzle。它们都有活跃的用户社区和一些商业支持,均由独立的服务供应商支持。同时还有几个优秀的开源关系数据库,值得我们了解一下。 1.1.1.Drizzle …