代码随想Day52 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300.最长递增子序列

这道题目的重点在于动态数组的定义

dp[i]:以nums[i]为结尾的最长递增子序列,因为这样定义可以进行递推;

递推:j从0-i进行对比,如果nums[i]大于nums[j],dp[i]=dp[j]+1;

初始化:所有的元素向初始化为1;

遍历顺序:从前到后;

详细代码如下:

class Solution {
public:
int lengthOfLIS(vector<int>& nums) 
{if(nums.size()==0) return 0;vector<int>dp(nums.size(), 1); //init as 1int max_len = 1;for (int i = 1; i < nums.size(); i++) {for (int j = 0; j < i; j++) {if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);}max_len = max(max_len, dp[i]);}return max_len;
}
};

674. 最长连续递增序列

这道题的相比上一题,因为是连续递增,所以只需要和前一个num[i-1]相比即可,不再进行详细分析,详细代码如下:

class Solution {
public:
int findLengthOfLCIS(vector<int>& nums)
{if(nums.size()==0) return 0;vector<int>dp(nums.size(), 1);int max_len = 1;for(int i = 1; i < nums.size(); i++) {if (nums[i] > nums[i - 1]) dp[i] = dp[i - 1] + 1;max_len = max(max_len, dp[i]);}return max_len;
}};

718. 最长重复子数组

这道题是对两个数组进行判断,因此需要二维数组,分析如下:

dp[i][j]:以A[i-1]为结尾和以B[j-1]为结尾的数组的最长重复子数组长度;i-1的结尾的原因,是这样初始化方便写,而不需要进行额外的判断。

递推:如果两个值相等,则dp[i][j]=dp[i-1][j-1];

初始化:根据递推公式,dp[0][0]应该是0,否则后续就无法得到想要的状态结果;

遍历:进行两层嵌套,从前往后即可;

详细代码如下:

class Solution {
public:
int findLength(vector<int>& nums1, vector<int>& nums2) 
{//二维dp//dp[i][j]:以A的i-1结尾,B的j-1结尾的最长重复长度//注意这里是为了初始化更方便vector<vector<int>>dp(nums1.size()+1, vector<int>(nums2.size() + 1, 0));int max_len = 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;max_len = max(max_len, dp[i][j]);}}return max_len;
}};

注意,上述代码可以进行空间优化,因为dp[i][j]仅和左上角元素有关,所以可以压缩维度,把i维度压缩,运用滚动数组即可,要注意的是同01背包问题一样,为了不把数据踩踏,里层的循环需要逆向,这样就不会篡改上一层的数据导致错误。

详细代码如下:

class Solution {
public:
int findLength(vector<int>& nums1, vector<int>& nums2)
{vector<int>dp(nums2.size() + 1, 0); //压缩第一个维度int max_len = 0;for (int i = 1; i <= nums1.size(); i++) {for (int j =nums2.size(); j >= 1; j--) //防止踩踏数据{if (nums1[i - 1] == nums2[j - 1]) dp[j] = dp[j - 1] + 1;else dp[j] = 0; //不相等需要赋值以便下次使用max_len = max(max_len, dp[j]);}}return max_len;}

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

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

相关文章

CSS3学习之01

box-sizing: border-box&#xff1a;width是整体的大小 content-box&#xff1a;width是内容区大小 flex box弹性布局 弹性布局子元素通常在同一行内显示。 flex-direction&#xff1a;布局内子元素的排列方式 row&#xff1a;默认从左到右 row-reverse&#xff1a;从右到…

用例状态

章节目录&#xff1a; 一、用例状态类型二、passed三、failed四、error五、xfail六、结束语 一、用例状态类型 用例执行完成后&#xff0c;每条用例都有自己的状态&#xff0c;常见的状态有&#xff1a; passed&#xff1a;测试通过。failed&#xff1a;断言失败。error&#x…

【二叉树】【DFS】104.二叉树的最大深度

题目 法1&#xff1a;DFS class Solution {public int maxDepth(TreeNode root) {if (root null) {return 0;} else if (root.left null && root.right null) {return 1;} else {return Math.max(maxDepth(root.left), maxDepth(root.right)) 1;}} }

深入理解Dockerfile —— 筑梦之路

FROM 基础镜像 可以选择现有的镜像&#xff0c;比如centos、debian、apline等&#xff0c;特殊镜像scratch&#xff0c;它是一个空镜像。 如果你以 scratch 为基础镜像的话&#xff0c;意味着你不以任何镜像为基础&#xff0c;接下来所写的指令将作为镜像第一层开始存在。 不…

英飞凌TC3xx之一起认识GTM系列(四)如何实现GTM与GPIO关联的配置(ATOM/TIM实例)

英飞凌TC3xx之一起认识GTM系列(四)说一说GTM的实现 1 各系列芯片的子模块集成能力2 TC38x芯片的子模块连接性总览3 GTM到GPIO的连接3.1 GTM对外输出时钟信号3.2 GTM输出到端口配置寄存器TOUTSEL3.3 时钟输出选择寄存器3.4 应用举例4 GPIO到GTM的连接4.1 Port到GTM的端口配置寄…

webpack打包批量替换路径(string-replace-webpack-plugin插件)

string-replace-webpack-plugin 是一个用于在 webpack 打包后的文件中替换字符串的插件。它可以用于将特定字符串替换为其他字符串&#xff0c;例如将敏感信息从源代码中移除或对特定文本进行本地化处理。比如文件的html、css、js中的路径地址想批量更改一下 http://localhost:…

【2023年终总结】纵是一路仆仆风尘,也莫忘了仰头

文章目录 1. 写在前面2. 关于生活3. 关于工作4. 关于以后 【作者主页】&#xff1a;吴秋霖 【作者介绍】&#xff1a;Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作&#xff01; 【作者推荐】&#xff1a;对JS逆向感兴趣的朋…

搭建flink集群 —— 筑梦之路

Apache Flink 是一个框架和分布式处理引擎&#xff0c; 用于在无边界和有边界数据流上进行有状态的计算。 Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 Flink并没有依靠自身实现所有分布式系统需要解决的问题&#xff0c; 而是在已有集群…

系列十一、解压文件到指定目录

一、解压文件到指定目录 1.1、需求 Linux的/opt目录有一个文件zookeeper-3.4.11.tar.gz&#xff0c;我现在想把该文件解压至/usr/local/目录&#xff0c;那么应该怎么做呢&#xff1f; 语法&#xff1a;tar -zxvf xxx -C /usr/local/ tar -zxvf zookeeper-3.4.11.tar.gz -C /u…

【一致性】角色 - 表情差异生成 【1】

原理&#xff1a;通过segment 局部重绘 可以根据lora 产生面部表情图片 模型&#xff1a;sam_vit_h_4b8939.pth 导入图片到segment 开启&#xff1a;Enable GroundingDINO GroundingDINO Detection Prompt &#xff1a;输入 face 然后点击&#xff1a;Preview Segmentation …

ES6的默认参数和rest参数

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

使用Promise.all来并行调用多个异步函数;依次同步调用函数

场景&#xff1a; 在一个 vue页&#xff0c;有个form表单数据需要使用到三个后端接口返回的数据&#xff08;常见的就是详情回显&#xff0c;需要下拉数据&#xff09;&#xff0c;要求拿到三个接口返回的数据后&#xff0c;再赋值给表单form。 总结&#xff1a;将方法从同步执…

基于遗传算法的双层规划,基于ga的双层规划

目录 背影 遗传算法的原理及步骤 基本定义 编码方式 适应度函数 运算过程 代码 结果分析 完整代码: 基于遗传算法的双层规划,基于ga的双层规划(代码完整,数据齐全)资源-CSDN文库 https://download.csdn.net/download/abc991835105/88674651 背影 基于遗传算法的双层规划…

贪心算法Part01 455分发饼干

455分发饼干 376摆动序列 53 最大子数组和

Mybatis之入门使用

系列文章目录 提示&#xff1a;这里可以添加系列文章的所有文章的目录&#xff0c;目录需要自己手动添加 Mybatis之入门使用 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、环境准备二、持久…

AIGC系统ChatGPT系统源码,Midjourney绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图+思维导图一站式解决方案

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

JUnit 简介

JUnit 是什么&#xff1f; JUnit是一个Java测试框架&#xff0c;主要用于单元测试、集成测试&#xff0c;也可以用于创建自动测试。 JUnit框架是最流行的Java测试框架之一。它提供了一些功能&#xff0c;使编写测试变得容易&#xff0c;包括支持多个测试用例、断言和报告。JUn…

CSS animation动画和关键帧实现轮播图效果HTML

CSS animation动画和关键帧实现轮播图效果HTML 这轮播图效果使用h5和css3实现效果&#xff0c;不需要js控制&#xff0c;但是其中的缺点就是不能使用鼠标进行切换效果。 具有代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset&qu…

华为无线AC内三层漫游配置详解

重要说明 1、在一台ac中实现三层漫游 2、ac和核心的互联vlan和ap的管理vlan是同一个广播域&#xff0c;可以不用配option 43 3、直接转发模式&#xff0c;ac上可以不起业务vlan&#xff0c;ac和核心交换机上可以只放行一个互联vlan 10 4、ac上要启两个vap魔板&#xff0c;两个…

使用JAVA Zookeeper构建分布式键值存储

在这篇文章中,我将使用 JAVA 和网络套接字构建一个简单的分布式键值存储。 我将展示如何在具有多个分区和复制的集群中使用 Zookeeper 作为协调服务。 本系统中Zookeeper服务的功能如下: 维护从服务器到分区的映射,即哪些服务器属于分区“i”。这些数据还可用于推断哪些服务…