【代码随想录|子序列问题】

轴承故障诊断——领域知识 幅域分析、频域分析及轴承方面的领域知识 阅读详情

1143.最长公共子序列

题目链接:1143. 最长公共子序列 - 力扣(LeetCode)

1.dp数组的含义

dp[i][j]:以[0,i-1]的nums1和以[0,j-1]的nums2的最长公共子序列的长度

2.递推公式

if (text1[i-1]==text2[j-1])dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);     

如果第i-1个字符和j-1个字符相等,那就 dp[i][j]=dp[i-1][j-1]+1;

如果第i-1个字符和j-1个字符不相等,那就保持前面字符相等的状态 dp[i][j]=max(dp[i-1][j],dp[i][j-1]);   

因为这里求的子序列是不连续的,所以比如nums1 = 【1,2,3,4,5】 , nums2 = 【1,2,3,8,5】

收集完3之后我还可以继续收集,所以dp数组最后一个数就是最大值,那在不相等的时候保持前面字符相等时的情况后面继续用

而如果是连续的话收集完3之后就不能继续收集了,得置0重新收集,dp数组的最后一个数不一定就是最大值了(可能在前面,要边遍历边取),那在不相等的时候就不做处理(因为初始化的时候该位置为0)

class Solution {
public:
    int longestCommonSubsequence(string text1, string text2) {
        vector<vector<int>> dp(text1.size()+1,vector<int>(text2.size()+1,0));
        for(int i=1;i<=text1.size();i++){
            for(int j=1;j<=text2.size();j++){
                if(text1[i-1]==text2[j-1])dp[i][j]=dp[i-1][j-1]+1;
                else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);                
            }
        }
        return dp[text1.size()][text2.size()];//是不连续的,最后一个值就是最大值
    }
};

 1035.不相交的线

题目链接:1035. 不相交的线 - 力扣(LeetCode)

求相同的元素,同时要保持顺序,是求最长公共子序列的意思,把上面的代码打一遍。

class Solution {
public:
    int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp(nums1.size() + 1,vector<int>(nums2.size() + 1, 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;
                else
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
            }
        }
        return dp[nums1.size()][nums2.size()];
    }
};

53.最大子数组和

题目链接:53. 最大子数组和 - 力扣(LeetCode)

1.dp数组的含义:
以i为结尾的nums[i] 的最大连续子序列的和

2.递推公式

dp[i]=max(dp[i-1]+nums[i],nums[i]);

取每个数的时候要么延续前面的值,要么重开从自己开始

这道题是求连续的子数组的和所以收集的时候要边遍历边取最大值

这里的result不能赋值为0,因为如果当nums只有一个数且不为0的时候,会只返回0,所以得赋值为nums[0]

3.初始化

dp[0]就是nums[0]结尾的子序列和,那就是nums[0];

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

392.判断子序列

题目链接:392. 判断子序列 - 力扣(LeetCode)

  1. dp数组含义:下标i-1为结尾的字符串s,和以下标j-1为结尾的字符串t,相同子序列的长度为dp[i][j]

  2. 递推公式:

这道题跟最长公共子序列的代码蛮像的,但是在递推公式上这道题是

else dp[i][j]=dp[i][j-1];

而最长公共子序列是 

else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);     

我试了一下两种递推公式都可以通过,但是在定义上最长公共子序列的代码放在这里可能欠妥

比如:  t:"ahbgdc"  s:"abdx" 这道题上在最后dp[s.size()][t.size()]的值是0

而递推公式中加上max的话dp[s.size()][t.size()]的值最后是3,最后和s.size()(4)不相等返回false答案也对,但是这里在检查到s里的‘’x‘’的时候,不是t的子串了,所以用0来表示可能更准确一些

class Solution {
public:
    bool isSubsequence(string s, string t) {
        vector<vector<int>> dp(s.size()+1,vector<int>(t.size()+1,0));
        for(int i=1;i<=s.size();i++){
            for(int j=1;j<=t.size();j++){
                if(s[i-1]==t[j-1])dp[i][j]=dp[i-1][j-1]+1;
                else dp[i][j]=dp[i][j-1];                
            }
        }
        if(dp[s.size()][t.size()]==s.size())return 1;
        else return 0;
    
    }
};

CSRT跟踪算法的使用 Fu Xianjun. All Rights Reserved. 文章目录 前言 一、CSRT跟踪算法是什么? 二、使用步骤 1.引入库 2.读入数据 总结 前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、CSRT跟踪算法是什么? 在具有通道和空间可靠性的判别相关滤波器(DCF-CSR)中,我们使用空间可靠性图将滤波器支持调整为从帧中选择区. 阅读详情

相关推荐

WOL唤醒配置(以太网、PHY、MAC)

MAC 就是以太网控制器,属于OSI的数字链路层。phy 属于OSI的物理层(Physical layer),所以叫phy。CPU Mac与phy通信通过MII接口,数据的传输通过MDIO数据线。通过配置phy的相关寄存器实现不同的功能。

qq_58264156的博客 8630

代码随想录day51 动态规划 子序列问题

代码随想录day51 动态规划 子序列问题

shiliuhua05的博客 388

2025虚幻游戏逆向工程解包尝试

2025虚幻游戏逆向工程解包指南 本文详细介绍了虚幻引擎5游戏逆向解包的完整流程,主要包括获取AES密钥、生成映射文件和导出资源三个关键步骤。作者在实际操作中遇到诸多难题:AES密钥获取工具存在加壳保护问题,映射文件生成器依赖复杂的VS编译环境,DLL注入工具的使用也存在技术门槛。通过多次尝试,作者发现部分游戏可直接搜索现成的AES密钥,而映射文件生成需要额外下载Memcury依赖库才能正常编译。文章提供了相关工具的下载链接和具体操作说明,但同时也指出每个环节都可能出现意外状况,逆向工程实际执行过程远比理论

wsdchong的博客 6150

代码随想录 动态规划-子序列问题-子序列(不连续)

其实也就是说A和B的最长公共子序列是[1,4],长度为2。 这个公共子序列指的是相对顺序不变(即数字4在字符串A中数字1的后面,那么数字4也应该在字符串B数字1的后面) 这么分析完之后,大家可以发现:本题说是求绘制的最大连线数,其实就是求两个字符串的最长公共子序列的长度!

m0_74267125的博客 706

京东礼品卡绑定技术解析与安全验证实践

电商系统开发中,卡券绑定是常见的业务场景,其核心在于安全验证机制的设计与实现。从技术原理来看,现代验证系统通常采用多层防护,包括前端数据加密、行为验证(如滑块验证)和风控校验等关键技术。这些机制通过设备指纹采集、请求签名验证等方式,有效防范自动化攻击。在实际工程实践中,开发者需要特别关注接口鉴权流程,正确处理安全令牌(如st/vt令牌)和请求签名。京东礼品卡绑定作为典型案例,展示了如何平衡用户体验与系统安全,其验证系统会持续升级,需要开发者跟踪接口变化。对于企业级应用,建议采用混合模式技术方案,结合浏览器自

weixin_28607671的博客 234

Codesys电子凸轮功能块MC_CamIn的masteroffset和slaveoffset参数的使用

问题1:在Codesys使用作轴电子凸轮时,MC_CamTableSelect的参数设置为MasterAbsolute=1,SlaveAbsolute=1,此设置为绝得模式, 此时主从轴当前位置都不为零时,此时Masteroffset=0、slaveOffset=0,凸轮启时出现突变,实轴无法启动。问题分析:在觉得模式下,主轴位置和从轴为是对应凸轮表的相位的,Masteroffset=0、slaveOffset=0,启动点时在主轴位置=0,从轴位置=0的点启动,此时主轴当前位置不为零则主从轴位置发生突变,

weixin_43587371的博客 1801

子序列问题笔记——代码随想录学习(一)

图片来源:代码随想录https://leetcode-cn.com/problems/longest-palindromic-subsequence/solution/516-zui-chang-hui-wen-zi-xu-lie-dong-tai-hap0/ ##「代码随想录」带你学透DP子序列问题!516. 最长回文子序列【动态规划】详解 最长回文子串 最长回文子序列 最长回文子序列 ,因为回文串要比较两端的对称性,这里的dp数组应该考虑是二维数组。 s[i,j] 表示以【i,j】为范围的s字符串。

Create_IT_Man的博客 229

使用 Simulink 进行电力电子系统的效率优化仿真

电力电子系统(Power Electronics System)是现代电力系统和工业自动化中的关键组成部分,广泛应用于可再生能源发电、电动汽车、不间断电源(UPS)、电机驱动等领域。为了提高系统的整体性能和经济性,必须对电力电子系统的效率进行优化。效率优化的目标是最大化系统的能量转换效率,减少损耗,从而提高系统的可靠性和经济效益。Simulink 提供了一个强大的仿真环境,可以用来设计、分析和验证电力电子系统的效率优化策略。本教程将详细介绍如何使用 Simulink 进行电力电子系统的效率优化仿真。

xiaoheshang_123的博客 355

代码随想录:动态规划|子序列问题全集

前一个状态到当前状态,自然的从前向后遍历。根据递推公式的原理可以找到答案,我们记录的是最大值,跟顺序无关。类比背包问题 物品:序列中的元素,背包容量:序列的长度。求最长子序列,这个物品必须得装,如果不装,不能从当前位置转化到下一个位置。递推中求最大值,我们就去找最小值。最小长度递增子序列只包含自己1个元素,长度为1。dp[0]包含一个元素已经初始化为1了。:dp[i][j] 记录以nums[i]结尾最长递增子序列的长度。], 保存最长序列的长度dp[5]=4。比如:[1, 4, 2, 3, 4,

weixin_43356770的博客 737

实战:爬取某小程序的订单数据(解析小程序 API 参数)

本文以美团外卖小程序为例,详细分析了电商类小程序订单数据接口的技术实现与采集方法。首先通过抓包定位核心接口,解析其请求参数;重点破解了token验证机制与sign签名加密算法,通过逆向分析还原参数生成逻辑;最后基于Python实现了订单数据的自动化爬取与存储。文章强调数据采集需遵守法律合规性,提供应对反爬机制的策略,并指出了必须在获得合法授权的前提下使用这些技术。该研究为数据采集工程师提供了实用的技术参考,但必须严格遵循"最小必要"原则,确保不违反平台规则和用户隐私保护法规。

2503_91057718的博客 2316

YOLO26涨点改进 | 全网首发Conv独家改进篇 | CVPR 2025 | 引入GCConv卷积改进YOLO26,含GCC3k2二次创新,能够捕捉更加丰富和复杂的特征信息,助力高效涨点

本文提出了一种基于GCConv模块的YOLO26目标检测模型改进方案。GCConv模块通过多路径结构增强特征学习能力,在训练阶段采用垂直多卷积和水平多路径配置,推理时重参数化为单一3x3卷积,显著提升推理速度而不损失性能。实验表明,该模块在复杂场景和多尺度目标检测任务中表现优异,特别适合资源受限的实时应用场景。文章详细介绍了GCConv的网络结构、核心代码实现、YAML配置文件修改方法,并提供了两种改进方案(GCConv和GCC3k2)的具体配置指导。

Ai缝合怪、助力小伙伴高效发论文 321

代码随想录:动态规划_05子序列问题

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l

weixin_51503393的博客 1190

手把手教你学Simulink实例--基于simulink搭建起一个基础的矩阵变换器仿真模型

矩阵变换器(Matrix Converter, MC)是一种直接将交流电源转换为另一频率和幅值的交流电源的电力电子设备,它不需要中间的直流环节。这种变换器通过控制一组双向开关来实现对输入电压的精确控制,从而产生所需的输出电压波形。Simulink提供了强大的仿真环境,可以用于设计、分析和验证基于矩阵变换器的电源系统。

MHD0815的博客 337

代码随想录Day52 子序列问题

dp含义:以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]递推公式:nums[i]>nums[i-1] dp[i]=dp[i-1]+1。递推公式:dp[i][j] = dp[i - 1][j - 1] + 1。递推公式:dp[i]=max(dp[i]+1,dp[i])dp含义:以下标i为结尾的连续递增的子序列长度为dp[i]初始化:dp[i][0] 和dp[0][j]初始化为0。dp含义:以nums[i]为尾的最长连续子序列的长度。初始化:dp[i]=1。

Ethan10086的博客 670

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

子序列问题-代码随想录-刷题笔记

子序列问题-代码随想录-刷题笔记

Coderwind的博客 848

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

代码随想录 动态规划-子序列问题-回文

647. 回文子串中等提示给你一个字符串 ,请你统计并返回这个字符串中 回文子串 的数目。回文字符串 是正着读和倒过来读一样的字符串。子字符串 是字符串中的由连续字符组成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。示例 1: 输入:s = "abc" 输出:3 解释:三个回文子串: "a", "b", "c" 示例 2: 输入:s = "aaa" 输出:6

m0_74267125的博客 798

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

代码随想录 动态规划-子序列问题-子序列(连续)

而是dp[6]。在回顾一下dp[i]的定义:包括下标i之前的最大连续子序列和为dp[i]。那么我们要找最大的连续子序列,就应该找每一个i为终点的连续最大子序列。所以在递推公式的时候,可以直接选出最大的dp[i]。

m0_74267125的博客 1211

动态规划解决子序列系列问题——代码随想录

1.最长递增序列 最长递增序列 (1)题目分析 找到最长严格递增子序列的长度,这里并没有要求连续,只是提到了相对位置关系。 动态规划五部曲分析 a.dp[i]的定义 dp[i]表示i之前包括i的最长上升子序列的长度; b.状态转移方程 if(nums[i]>nums[j]) dp[i] = max(dp[i],dp[j]+1); c.dp[i]初始化 每一个i,对应的dp[i]最长上升子序列,起始大小至少是1; d.确定遍历顺序 dp[i]是从0到i-1推导而来,那么一定是从前向后遍历。 (2)代码实

weixin_45354197的博客 361

代码随想录||day25 非递减子序列,全排列问题

意思就是,在已经确定了第二个元素时(也就是当前元素是true)而前一个元素是false时说明前一个元素肯定已经考虑过了,因为遍历是从左往右遍历,此时如果不进行continue,就会重复考虑相同元素,所以当。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。,找出并返回所有该数组中不同的递增子序列,递增子序列中。给定一个可包含重复数字的序列。给定一个不含重复数字的数组。返回所有不重复的全排列。不用哈希表,用set。:时就cotinue。

2301_80639580的博客 1264

day42 代码随想录 | 子序列问题 面试高频题

如果不相等 就看看text1[0, i - 2]与text2[0, j - 1]的最长公共子序列 和 text1[0, i - 1]与text2[0, j - 2]的最长公共子序列,取最大的。举个例子A[0]如果和B[0]相同的话,dp[1][1] = dp[0][0] + 1,只有dp[0][0]初始为0,正好符合递推公式逐步累加起来。但dp[i][0] 和dp[0][j]要初始值,因为 为了方便递归公式dp[i][j] = dp[i - 1][j - 1] + 1;注意这个题是子序列,并不要求连续。

Zison_Chen的博客 1019

代码随想录第37天:动态规划10(公共子序列问题)

动态规划10(公共子序列问题)

weixin_70587313的博客 717

代码随想录 动态规划-子序列问题-编辑距离

t[j - 1]),此时相当于t要删除元素,t如果把当前元素t[j - 1]删除,那么dp[i][j] 的数值就是 看s[i - 1]与 t[j - 2]的比较结果了,即:dp[i][j] = dp[i][j - 1];其实这里 大家可以发现和。

m0_74267125的博客 784

代码随想录打卡第37天:动态规划解决子序列问题2

打卡第37天:动态规划解决子序列问题2

mooc666quq的博客 2255

代码随想录---最长公共子序列问题中的问题解答

摘要: 最长公共子序列(LCS)问题中,当text1[i]≠text2[j]时,状态转移为dp[i][j]=max(dp[i-1][j],dp[i][j-1])。这是因为: dp[i-1][j]包含情况①(不包含text1[i]和text2[j])和②(包含text1[i]但不含text2[j]) dp[i][j-1]包含情况①和③(不含text1[i]但含text2[j]) 取最大值可以确保覆盖所有可能情况,虽然可能包含重复计算情况①,但不会遗漏最优解。该策略保证了在字符不匹配时,能正确继承前序最优结果。

qq_52276934的博客 726

代码随想录打卡—day52—【子序列问题】— 8.31 最大子序列

代码随想录打卡—day52—【子序列问题】— 8.31 最大子序列

weixin_60899084的博客 497

2024.08.12 代码随想录 | 动态规划 子序列问题

给你一个整数数组nums,找到其中最长严格递增子序列的长度。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7]是数组的子序列难点:状态转移方程位置i 的 最长升序子序列 等于 j。所以:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);如果nums[i] < 所有的 nums[j],那不是取 初始值1了吗?所以这里dp[i]表示的是考虑nums[:i]时,所选序列中。

m0_46259676的博客 1096
上一篇: 【代码随想录|子序列系列300,674,718】
下一篇: 【代码随想录|动态规划 编辑距离问题】
mazo_command
博客等级 码龄2年 275粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值