day55 最长递增子序列 最长连续递增子序列 最长重复子数组

题目1  300 最长递增子序列

题目链接 300 最长递增子序列

题意

找到整数数组nums的最长严格递增子序列的长度(子序列并不改变原始的顺序,但是可以删除元素)

动态规划

动规五部曲

1)dp数组及下标i的含义

dp[i] 表示以nums[i]为结尾的最长递增子序列的长度

2)dp数组初始化

根据定义 长度至少是1  dp[i] = 1

3)递推公式

j从0到i-1各个位置的最长升序子序列 + 1 的最大值 

要计算每个当前值dp[i]与现在遍历的nums[j]的长度的大小关系 每一个值都要进行比较

if(nums[i] > nums[j]) dp[i] = max(dp[j]+1,dp[i])

4)遍历顺序

根据递推公式 当前长度依赖于之前的结果  i从小到大遍历 j的遍历顺序无所谓,只要把i-1的范围内的值遍历完就ok

for(i=1;i<nums.size(); i++){

     for(j=0;j<i;j++){

      }

}

5)打印dp数组

代码

class Solution {
public:int lengthOfLIS(vector<int>& nums) {//定义dp数组  初始化vector<int> dp(nums.size(), 1);int result = 0;for(int i = 0; i < nums.size(); i++){for(int j = 0; j < i; j++){if(nums[i] > nums[j]) dp[i] = max(dp[j] + 1, dp[i]);}result = max(result, dp[i]);}return result;}
};
  • 时间复杂度: O(n^2)
  • 空间复杂度: O(n)

题目2   674 最长连续递增子序列

题目链接  674 最长连续递增序列

题意

找到未排序的整数数组的最长且连续递增的子序列的长度(不能删减元素了)

动态规划

动规五部曲

1)dp数组及下标i的含义

dp[i] 表示以nums[i]为结尾的最长连续递增子序列的长度

2)dp数组初始化

至少包含1个元素  dp[i] = 1

3)递推公式

只比较nums[i]与nums[i-1]即可,这样才可以保证是连续 

不用去比较nums[j]与nums[i] (j是在0到i之间遍历)

if(nums[i] > nums[i-1]) dp[i] = dp[i-1] + 1

4)遍历顺序

根据递推公式 dp[i]依赖于dp[i-1]  从前往后推导

5)打印dp数组

代码

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {//定义dp数组 初始化vector<int> dp(nums.size(), 1);int result = 1;  //对于只有1个元素的数组for(int i = 1; i < nums.size(); i++){if(nums[i] > nums[i-1]) dp[i] = dp[i-1] + 1;result = max(result, dp[i]);}return result;}
};
  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

题目3  718 最长重复子数组

题目链接  718 最长重复子数组

题意

返回两个整数数组nums1和nums2的公共的最长子数组的长度

动态规划

动规五部曲

1)dp数组及下标i的含义

想到使用二维dp数组可以记录两个字符串的所有比较情况

dp[i][j] 表示以nums1[i-1]结尾的数组和以nums2[j-1]结尾的数组的公共最长子数组的长度

2)dp数组初始化

根据递推公式 初始化第一行第一列

根据dp数组定义 dp[i][0] 与 dp[0][j] 没有意义

根据递推公式 是在上一个基础上加1 应该从0开始往上加 dp[i-1][0] = 0  dp[0][j-1] = 0  其他下标可初始为任意值

3)递推公式

根据dp数组的定义 dp[i][j]以nums1[i-1]结尾 nums2[j-1]结尾  所以比较nums1[i-1]与nums2[j-1]

if(nums1[i-1] == nums2[j-1]) dp[i][j] = dp[i-1][j-1] + 1

4)遍历顺序

遍历2个数组的顺序谁先谁后均可 只要把两个数组遍历完即可

之所以有等号,根据dp数组的定义 dp[i][j]以nums1[i-1]结尾 nums2[j-1]结尾

等号代表 nums1[nums1.size()-1]   nums2[nums2.size()-1]

for(i=1;i<=nums1.size();i++){

   for(j=1;j<=nums2.size();j++){

   }

}

5)打印dp数组

代码

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {//定义dp数组  初始化dp数组vector<vector<int>> dp(nums1.size() + 1, vector<int>(nums2.size() + 1, 0));int result = 0;for(int i = 1; i <= nums1.size(); i++){for(int j = 1; j <= nums2.size(); j++){if(nums1[i-1] == nums2[j-1]){dp[i][j] = dp[i-1][j-1] + 1;}result = max(result, dp[i][j]);}}return result;}
};
  • 时间复杂度:O(n × m),n 为nums1长度,m为nums2长度
  • 空间复杂度:O(n × m)

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

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

相关文章

dnspy逆向和de4dot脱壳

拿到一个软件&#xff0c;使用dnspy查看&#xff0c;发现反汇编后关键部分的函数名和代码有很多乱码&#xff1a; 这样的函数非常多&#xff0c;要想进一步调试和逆向&#xff0c;就只能在dnspy中看反汇编代码了&#xff0c;而无法看到c#代码&#xff0c;当时的整个逆向过程只剩…

遥感图像处理:从畸变消除到专题信息提取

​ ​ ​在遥感技术的应用中&#xff0c;图像处理是不可或缺的关键步骤。从消除各种辐射畸变和几何畸变&#xff0c;到利用增强技术突出景物的光谱和空间特征&#xff0c;再到进一步理解、分析和判别处理后的图像&#xff0c;这一过程为我们呈现了一幅幅更为真实、清晰的…

免费ssl证书能一直续签吗?如何获取SSL免费证书?

免费SSL证书是否可以一直续签。我们需要了解SSL证书的基本工作原理。当你访问一个使用HTTPS协议的网站时&#xff0c;该网站实际上在使用一个SSL证书。这个证书相当于一个数字身份证明&#xff0c;它验证了网站的真实性和安全性。而这个证明是由受信任的第三方机构——通常是证…

被控平台的远程控制软件:功能、应用与安全性考量

随着信息技术的迅猛发展&#xff0c;远程控制软件在多个领域中的应用日益广泛。这类软件允许用户通过网络远程访问和控制另一台计算机或设备&#xff0c;为工作、学习和生活带来了极大的便利。然而&#xff0c;这种技术同样伴随着安全风险&#xff0c;特别是在被控平台方面。 K…

Harmony鸿蒙南向驱动开发-MIPI DSI

功能简介 DSI&#xff08;Display Serial Interface&#xff09;是由移动行业处理器接口联盟&#xff08;Mobile Industry Processor Interface (MIPI) Alliance&#xff09;制定的规范&#xff0c;旨在降低移动设备中显示控制器的成本。它以串行的方式发送像素数据或指令给外…

C语言程序设计每日一练(1)

探索数字组合的奇妙世界&#xff1a;如何生成所有独特的三位数 当我们想要探索由1、2、3、4这四个数字能组成多少个不同的三位数时&#xff0c;我们实际上是在解决一个排列组合的问题。这不仅是一个数学问题&#xff0c;也是编程领域经常遇到的挑战&#xff0c;特别是在数据处…

AI论文速读 | TF-LLM:基于大语言模型可解释性的交通预测

论文标题&#xff1a; Explainable Traffic Flow Prediction with Large Language Models 作者&#xff1a;Xusen Guo, Qiming Zhang, Mingxing Peng, Meixin Zhu(朱美新)*, Hao (Frank)Yang(杨昊) 机构&#xff1a;香港科技大学&#xff08;广州&#xff09;&#xff0c;约翰…

Hadoop、HDFS、Hive、Hbase区别及联系

Hadoop、HDFS、Hive和HBase是大数据生态系统中的关键组件,它们都是由Apache软件基金会管理的开源项目。下面将深入解析它们之间的区别和联系。 Hadoop Hadoop是一个开源的分布式计算框架,它允许用户在普通硬件上构建可靠、可伸缩的分布式系统。Hadoop通常指的是整个生态系统…

Fast-Planner(五)详解TopologyPRM

本文上接Fast-Planner第一篇文章的内容&#xff0c;本文主要详解这一系列的第二篇Robust Real-time UAV Replanning Using Guided Gradient-based Optimization and Topological Paths中的TopologyPRM即其代码。如有问题&#xff0c;欢迎各位大佬评论指出&#xff0c;带着我一起…

未设置超时时间导致线程池资源耗尽,排查过程

错误分析&#xff1a; Scheduled进行定时任务的时候&#xff0c;spring会创建一个线程&#xff0c;然后用这个线程来执行任务&#xff0c;如果这个任务阻塞了&#xff0c;那么这个任务就会停滞&#xff0c;出现不执行的情况。而使用原生的方法进行http请求时&#xff0c;如果不…

应该如何进行POC测试?—【DBA从入门到实践】第三期

在数据库选型过程中&#xff0c;为确保能够灵活应对数据规模的不断扩大和处理需求的日益复杂化&#xff0c;企业和技术人员会借助POC测试来评估不同数据库系统的性能。在测试过程中&#xff0c;性能、并发处理能力、存储成本以及高可用性等核心要素通常会成为大家关注的焦点&am…

分析染色体级别的基因组装配揭示了六倍体栽培菊花的起源和进化-文献精读-7

Analyses of a chromosome-scale genome assembly reveal the origin and evolution of cultivated chrysanthemum 分析染色体级别的基因组装配揭示了栽培菊花的起源和进化 六倍体植物基因组的文献&#xff0c;各位同仁还有什么有特色的基因组评论区留言~ 摘要 菊花&#xf…

如何将PHP的Webman框架打包成二进制文件运行

看了看webman的官方文档&#xff0c;发现居然还能打包为二进制&#xff0c;这样太厉害了吧&#xff01; 先执行这个 composer require webman/console ^1.2.24 安装这个console的包&#xff0c;然后 执行 php webman build:bin 8.1 结果谁想到它报错提示&#xff1a; 好…

嵌入式软件裸机开发—常用的软件架构

嵌入式软件裸机开发 嵌入式软件裸机开发是指在没有操作系统支持的情况下&#xff0c;直接对硬件进行编程&#xff0c;以实现特定功能的开发过程。这种开发方式适用于资源受限、实时性要求高或对系统开销敏感的应用场景。在裸机开发中&#xff0c;设计合理的软件架构对于保证程…

Lesson1--数据结构前言

1. 什么是数据结构&#xff1f; 2. 什么是算法&#xff1f; 3. 数据结构和算法的重要性 4. 如何学好数据结构和算法 5. 数据结构和算法书籍及资料推荐 1. 什么是数据结构&#xff1f; 数据结构(Data Structure) 是计算机存储、组织数据的方式&#xff0c;指相互之间存在一…

oracle 删除用户名

在Oracle数据库中&#xff0c;删除用户的操作通常需要DBA权限。以下是删除Oracle用户的基本SQL命令&#xff1a; DROP USER username CASCADE;请将username替换为你想要删除的用户名。 CASCADE关键字表示同时删除用户拥有的所有对象&#xff08;如表、视图、序列等&#xff0…

机器学习和深度学习-- 李宏毅(笔记与个人理解)Day8

Day 8 classification &#xff1a;Probabilistic Generative Model 今天上了一整天的课&#xff0c; 本来实在是更新不动了&#xff0c;但是看到《剑来》更新了&#xff0c;想一想这本书里面一直强调的成功的feature – 心性&#xff0c;嗯心性坚毅就好&#xff01;主人公陈平…

Unity 遮罩

编辑器版本 2017.2.3f1 学习Unity的三张遮罩方式 1. Mask 遮罩方式 首先&#xff0c;在界面上创建2个Image&#xff0c;一个命名Img_Mask,大小设置 400* 400&#xff0c; 一个命名Img_Show,大小设置500*500。 然后&#xff0c;给 Img_Mask添加Mask,选择Img_Mask,点击Add Com…

docker 创建容器过程

结合下图&#xff0c;本文讨论docker 创建容器过程&#xff1a; START└── [用户通过Docker Client发出指令]└── (1) docker run 或 docker create 命令├── (2) Docker Client与Docker Daemon建立通信连接└── (3) Docker Daemon接收到创建容器请求├── (4) 检查…

vue3里前端生成二维码和解析二维码(不需要后端参与)

1.生成二维码 1&#xff09;安装qrcode npm install qrcode 2&#xff09;生成二维码代码 <template><el-input v-model"formData.designation"></el-input><el-input v-model"formData.people"></el-input><el-button …