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

算法训练day56leetcode300.最长递增子序列674最长连续递增序列 本题最关键的是要想到dp[i]由哪些状态可以推出来,并取最大值,那么很自然就能想到递推公式:dp[i] = max(dp[i], dp[j] + 1);因为本题要求连续递增子序列,所以就只要比较nums[i]与nums[i - 1],而不用去比较nums[j]与nums[i] (j是在0到i之间遍历)。既然不用j了,那么也不用两层for循环,本题一层for循环就行,比较nums[i] 和 nums[i - 1]。 阅读详情

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

300.最长递增子序列

文档讲解:代码随想录
视频讲解: 动态规划之子序列问题,元素不连续!| LeetCode:300.最长递增子序列
状态

  1. dp数组含义
    dp[j] 表示 nums[j]之前的最长子序列长度
  2. 递推关系
    对于在0-j之间的一个数下标i,如果nums[j] > nums[i] 那么dp[j] = dp[i]+1
dp[j] = max(dp[i]+1,dp[j]);
  1. 初始化
    dp[0] = 1;
  2. 遍历顺序
    从前向后
  3. 打印dp
class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        int len = nums.size();
        if(len == 0) return 0;
        vector<int> dp(len,1);
        int res = 1;
        //对每个位置的数,比较其前面的所有数,然后更新dp
        for(int i = 1;i<len;i++)
        {
            for(int j = 0;j<i;j++)
            {
                if(nums[i] > nums[j])
                {
                    dp[i] = max(dp[i],dp[j]+1);
                }
                if(dp[i] > res)
                {
                    res = dp[i];
                }
            }
        }

        return res;
    }
};

使用res来接受结果,因为结果不会存储在最后一个数值位置

674.最长连续递增序列

文档讲解:代码随想录
视频讲解: 动态规划之子序列问题,重点在于连续!| LeetCode:674.最长连续递增序列
状态

与上一题主要是递推公式的区别。这题要求连续那说明只有nums[i] > nums[i-1] dp[i] = dp[i-1]+1

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

718.最长重复子数组

文档讲解:代码随想录
视频讲解: 动态规划之子序列问题,想清楚DP数组的定义 | LeetCode:718.最长重复子数组
状态

本题需要比较两个数组的重复部分长度,对于dp数组来说就需要使用二维dp两个维度分别表示两个数组,实际上dp数组之间的递推关系只有对角线元素,所以可以进行压缩降为一维

  1. dp数组
    dp[i][j] 表示 nums1 和 nums2 两个数组分别以nums1[i] 和 nums2[j] 结尾时, 最长的重复子串长度
  2. 递推关系
    如果nums[1] == nums2[j] 那么 dp[i][j] = dp[i-1][j-1]+1
  3. 初始化
    对于 i=0 的情况,遍历nums2 初始化dp[0][j]
    对于 j=0 的情况,遍历nums1 初始化dp[i][0]
  4. 遍历顺序
    从前向后
  5. 打印dp
//dp[i][j] 表示A[i] B[j] 结尾的两个数组的最长相对子数组的长度
//所以如果A[i] == B[j] 那么 dp[i][j] = dp[i-1][j-1] + 1
class Solution {
public:
    int findLength(vector<int>& nums1, vector<int>& nums2) {
        vector<vector<int>> dp(nums1.size(),vector<int>(nums2.size()));
        //初始化
        for(int j = 0;j<nums2.size();j++)
        {
            if(nums1[0] == nums2[j])
            {
                dp[0][j] = 1;
            }
        }
        for(int i = 0;i<nums1.size();i++)
        {
            if(nums1[i] == nums2[0])
            {
                dp[i][0] = 1;
            }
        }

        int res = 0;
        //遍历
        for(int i = 0;i<nums1.size();i++)
        {
            for(int j=0;j<nums2.size();j++)
            {
                if(nums1[i] == nums2[j] && i>0 && j>0)
                {
                    dp[i][j] = dp[i-1][j-1]+1;
                }
                res = max(res,dp[i][j]);
            }
        }
        return res;
    }
};
3DE重客户端安装 阅读详情

相关推荐

用51单片机和LD3320语音模块DIY一个会说话的温度报警器(附完整代码)

本文详细介绍了如何使用51单片机和LD3320语音模块DIY一个智能温度报警器,包括硬件选型、电路设计、软件开发及核心功能实现。通过DS18B20温度传感器和语音模块的结合,实现温度超标时的语音报警功能,适合智能家居系统等应用场景。附完整代码,方便开发者快速复现。

weixin_42525632的博客 419

代码随想录训练营Day 56|力扣300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

dp[i]为以i为下标结尾的子序列(包括i)的最长递增子序列。有了这个定义,才能知道dp数组怎么写,如果是其它的定义应该还是挺难写的。

weixin_64434454的博客 845

UniTouch:多模态触觉对齐技术如何重塑零样本跨模态应用

UniTouch模型通过创新的多模态触觉对齐技术,成功将触觉数据映射到通用的视觉-语言嵌入空间,解决了触觉模态的“孤岛困境”。该技术利用对比学习和传感器特定标记,实现了高质量的零样本学习能力,使模型无需额外训练即可完成触觉分类、描述等任务,并能驱动跨模态生成,为机器人、VR和智能制造等领域提供了强大的触觉理解新范式。

weixin_29044713的博客 409

【Day56】代码随想录之动规字符串子序列_300最长递增子序列_674最长连续递增序列_718最长重复子数组

做这道题的时候我用股票买卖的思路来解,序列的每个节点有 添加子序列长度dp[i][0]、添加子序列的末尾值dp[i][1]、不添加子序列长度dp[i][2]、不添加子序列的末尾值dp[i][3] 四个状态。,我这个整数nums[i]能不能和之前的dp[j]组成子序列,不断更新nums[i]加入以后子序列的长度dp[i],每一个dp[i]代表的是不同的子序列的长度,从中遍历出最大的即可。分析原因:是因为在2的时候前面已经有子序列3,5,6长度为3会把2过滤到,但是结果是 2,4,5,6,7,12。

weixin_46275441的博客 934

【学习笔记-QGIS】 QGIS从零快速上手

安装文章参考:https://zhuanlan.zhihu.com/p/370633306。

Xcong_Zhu的博客 1万+

ctftools-all-in-one使用说明

OAEP (Optimal Asymmetric Encryption Padding) 是一种用于RSA加密的填充方案,目的是提高RSA加密的安全性。在CTF比赛中,如果模数N的两个因子比较接近,使用"费马分解(N)"可能会更快地得到结果;OAEP 是 RSA 的一种标准填充方式(在 PKCS#1 v2.0+ 中定义),因此这类题目本质上仍是 RSA 题,但。,导致你不能直接用常规的 RSA 解密公式 �=�� mod �m=cdmodN 得到有意义的明文。如果你在 CTF 中遇到 RSA 题,

2501_91682449的博客 1713

代码随想录刷题笔记 Day 56 | 最长递增子序列 No.300 |最长连续递增序列 No.674 | 最长重复子数组 No.718

本题的初始化和之前有所不同,注意这个递推公式:dp[i][1] = Math.max(dp[i][1], dp[j][1] + 1); 如果简单的将这个值初始化为 0,那如果前面没有比 num[i] 小的值,那这个值就会 保持 0,而通过题意可以直到,这个值应该为 1。 所以所有的 dp[i][1] 都应该初始化为 1。

kkq的博客 763

Agent 智能体学习指南:从入门到求职的完整路线

AI Agent 不是更长的 prompt,而是一类系统设计——模型在受控环境里观察状态、选择动作、调用工具、接收反馈。本文系统梳理 Agent 的 5 个核心概念、7 个关键模块(Goal/State/Context/Tools/Loop/Guardrails/Eval)、三条学习路线(工程落地/研究算法/求职作品)、框架选型策略(LangGraph/OpenAI Agents SDK/Pydantic AI 等场景推荐),以及可执行的 7 天最小项目计划(从概念到简历 bullet)。

program哲学 229

代码随想录算法训练营day56 || 300.最长递增子序列,674. 最长连续递增序列,718. 最长重复子数组

心得:对于序列比较类型的题目,若使用动态规划进行求解,首先状态转换是不容易看出来的,因为序列是元素不断在访问,而不是我们前面的背包或者股票以及打家劫舍那样有充分形象的动态来形成状态,序列比较中只是遍历,遍历一个位置后整体环境没有多大变化,所以序列题目的动态规划需要从暴力求解中寻找思路,甚至可以理解为是对暴力求解的优化。其次就是序列题目需要定义一个额外的用来保存全局最大值的变量,序列题目的dp数组是一直暂存数组不同位置的状态,不一定在末尾保存的就是整个数组遍历之后的最佳值。

旭 463

Archery通过OpenResty代理转发后登录一直提示Forbidden

测试几遍,连账号密码都没用验证,因为不管输什么都是提示Forbidden。找到配置文件settings.py,下面命令可到配置文件路径。回到页面刷新,随便输入个账号密码,验证失败证明请求成功了。查看Preview,提示CSRF验证失败,请求被中断。域名:dba.hkeasyspeed.com。打开开发者工具查看,网络里面可以看到报403。添加一条配置,把你配置域名添加进去。可以看到页面可以正常访问到。进入Archery容器。重启Archery容器。正常输入账号密码,OK。

万物皆可学 3143

Altium Designer应用技巧1: 功能模块的复用方法

Altium Designer应用技巧1: 功能模块的复用方法      我们在使用Altium Designer进行电路图设计时,常会遇到功能模块的复用问题,例如我们经常需要将12V以DC-DC的方式转换成5V,这在很多线路板上都会应用到。现在我们普通的做法是,每个板子都重新绘制一遍,像这样DC-DC的电路,很浪费时间。那么如何采用提高工作效率呢?我们可以采取Altium Desi

snmplink的博客 1万+

代码随想录算法训练营day56 | 300.最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度,一定要是以nums[i]为结尾。

sunflowers11的博客 535

PCL Alpha Shapes平面点云边界特征提取【2026最新版】

alpha shapes算法用于平面点云的边界特征提取。博客长期更新,本文最近一次更新时间为:2026年4月20日。

点云侠的博客 27万+

代码随想录算法训练营Day56|LeetCode300最长递增子序列、LeetCode674最长连续递增子序列、LeetCode718最长重复子数组

LeetCode674最长连续递增子序列。LeetCode300最长递增子序列。LeetCode718最长重复子数组。

m0_66412823的博客 379

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Day56】代码随想录之动态规划part13——最长递增子序列、最长连续递增序列、最长重复子数组

今天晚上继续补代码随想录的题目,今天下午结束了所有的股票问题,下面开始序列的问题,开冲!!!

格子格鸽的个人博客 963

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

随想录Day56 | 300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

重复子串专题。

weixin_44645059的博客 585

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

day56 动态规划part13(300. 最长递增子序列674. 最长连续递增序列718. 最长重复子数组)

中等给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

weixin_43889767的博客 494

算法训练营 day56 动态规划 最长递增子序列 最长连续递增序列 最长重复子数组

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。dp[i]的定义本题中,正确定义dp数组的含义十分重要。状态转移方程位置i的最长升序子序列等于j从0到i-1各个位置的最长升序子序列 + 1 的最大值。所以:if (nums[i] > nums[j]) dp[i] = max(dp[i], dp[j] + 1);。

qq_54343969的博客 259

代码随想录算法训练营29期Day56|LeetCode 300,674,718

动态规划

tlingyuqi的博客 1109

day56|● 300.最长递增子序列 ● 674. 最长连续递增序列 ● 718. 最长重复子数组

动态规划

qerwtrt4t的博客 471

DAY56:动态规划(子序列系列)300\674\718

如果dp[i][j] :以下标i为结尾的A,和以下标j为结尾的B,最长重复子数组长度为dp[i][j]。因此状态状态公式变成if(nums[i] > nums[i - 1]) dp[i] = dp[i - 1] + 1;dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。因为dp[0][0]没有定义初始化为0,同时dp[i][0]和dp[0][j]也没有含义,所以初始化为0。dp[0][0]没有定义,所以i,j要从1开始。空间复杂度:O(n)

weixin_43799497的博客 513

算法训练Day52:300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组

300.最长递增子序列 674. 最长连续递增序列 718. 最长重复子数组 动态规划

qq_45865950的博客 519

训练营打卡Day56

训练营打卡Day56

hhk166的专栏 307

代码随想录Day56

如果 nums[i] > nums[i - 1],那么以 i 为结尾的连续递增的子序列长度 一定等于 以i - 1为结尾的连续递增的子序列长度 + 1。即:dp[i] = dp[i - 1] + 1;dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。: “以下标i - 1为结尾的A” 标明一定是 以A[i-1]为结尾的字符串 )思路:找到所有的递增区间,再合并起来,想不到用递推公式可以怎么推,难搞。

Allen_7_kklt的博客 364

Day 56 | 动态规划 300.最长递增子序列 、674. 最长连续递增序列 、 718. 最长重复子数组

【代码】Day 56 | 动态规划 300.最长递增子序列 、674. 最长连续递增序列 、 718. 最长重复子数组。

m0_46554918的博客 275

DAY 56 动态规划

dp[i]指以nums[i]结尾的最长递增子序列的长度dp[i]指以nums[i]结尾的最长且连续递增子序列的长度dp[i][j]指nums1中前i个元素和nums2中前j个元素的最长重复子数组长度。

weixin_45845722的博客 339
上一篇: 代码随想录Day55 | 股票买卖
下一篇: 代码随想录Day57 |1143.最长公共子序列 1035.不相交的线 53. 最大子序和
sRiddle
博客等级 码龄7年 528粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值