当前位置: 首页 > news >正文

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

1.最长递增子序列

视频讲解:动态规划之子序列问题,元素不连续!| LeetCode:300.最长递增子序列_哔哩哔哩_bilibili

代码随想录

代码: 

class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int> dp(nums.size(),1);// dp[i]表示以下标i结尾包括i的最长递增子序列的长度int result = 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[j] + 1,dp[i]);}}if(dp[i] > result) result = dp[i];}return result;}
};

 思路:这道题真的就是完全没有思路。

 我感觉精髓就在于dp数组的定义:

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

dp数组的递推公式:

        首先要清楚子序列的含义,子序列不要求连续,只要求顺序!!如果我们要求以i为结尾的最长递增子序列,那么它可以接上任何在以它之前下标为结尾的子序列(只要nums[i]大于nums[j])。所以我们在求dp[i]的时候要遍历在在这之前的所有dp数组的值,满足条件的时候,去取其中的最大值。

        同时,因为dp数组只是以i结尾的最长子序列的长度,它不是整个数组的最长子序列的长度,所有我们还要在所有的dp数组元素中取最大值,这里使用result来保存。

dp数组初始化:按照dp数组的含义,所有的元素应该初始化为1.

遍历顺序:对应i的循环——必须正序遍历;j的循环——都可以。

2.最长连续递增序列

视频讲解:动态规划之子序列问题,重点在于连续!| LeetCode:674.最长连续递增序列_哔哩哔哩_bilibili

代码随想录

代码: 

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {vector<int> dp(nums.size(),1);int result = 1;// dp[i]为以i下标为结尾的最长连续递增子序列的长度for(int i = 1; i < nums.size(); i++){if(nums[i] > nums[i - 1]) dp[i] = dp[i - 1] + 1;if(dp[i] > result) result = dp[i];}return result;}
};

 思路:

这道题和上一题的区别就是,这次必须要求连续。我们只能在以前一个元素为结尾的子序列上递增。不需要那个j的循环了。其余的都一样。

dp数组的含义:以下标i为结尾(包括下标i)的最长连续递增子序列的长度

dp数组的初始化:按照含义,全部初始化为1

dp数组的递推公式:如果当前元素值大于前一个元素,就可以在前一个dp元素值上加一

dp数组的遍历顺序:正序遍历

注意:dp数组只是以下标i为结尾的最长连续递增子序列,但是题上求的是整个数组的最长连续递增子序列。所以还是要用result来记录dp数组里的最大值

3.最长重复子数组

视频讲解:动态规划之子序列问题,想清楚DP数组的定义 | LeetCode:718.最长重复子数组_哔哩哔哩_bilibili

代码随想录

代码:

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {int result = 0;vector<vector<int>> dp(nums1.size() + 1,vector(nums2.size() + 1,0));// dp[i][j] 表示以nums1以下标i - 1为结尾,和nums2以下标j - 1为结尾的子数组的最长重复子串的长度// 其中dp[0][j]和dp[i][0]都没有实际意义,用i-1和j-1主要是为了方便初始化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;if(dp[i][j] > result) result = dp[i][j];}}}return result;}
};

思路: 

最长重复子数组——子数组其实就是连续的子序列。

dp数组的含义:

        dp[i][j] 表示以nums1以下标i - 1为结尾,和nums2以下标j - 1为结尾的子数组的最长重复子串的长度;其中dp[0][j]和dp[i][0]都没有实际意义,用i-1和j-1主要是为了方便初始化。这次是二维的数组,因为要涉及到两个数组的最长重复子数组。

dp数组的递推公式:

        因为是dp数组是以下标i - 1和j - 1结尾的最长重复子数组,所以我们的判断条件是num1[i - 1]和nums2[j - 1]是否相等,如果相等就在dp[i - 1][j - 1]的基础上加1。

        最后也是一样,要求这些dp数组元素中的最大值。

 dp数组的初始化:dp[0][j]和dp[i][0]都没有实际意义,而且为了能够推出符合实际意义的dp[1][1]应该把这些元素初始化为0

dp数组的遍历顺序:正序遍历,两次for循环可以反。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 概率论与数理统计,重要知识点——全部公式总结
  • Vue3_对接腾讯云COS_大文件分片上传和下载
  • Windows环境如何使用Flutter Version Manager (fvm)
  • S1E48:内存池 课后作业
  • DeepSORT(目标跟踪算法)中自由度决定卡方分布的形状
  • 34、matlab输入命令汇总
  • 中科数安 |-公司办公透明加密系统,数据防泄漏软件
  • 【Vue】核心概念 - module
  • MySQL之查询性能优化(七)
  • JavaWeb期末知识点复习
  • Unity 使用TextMeshPro实现图文混排
  • azure cli的安装和使用
  • 硬件工程师学习规划
  • 多客圈子论坛系统 httpGet 任意文件读取漏洞复现
  • 臻奶惠的行业优势与市场竞争力解析
  • Elasticsearch 参考指南(升级前重新索引)
  • git 常用命令
  • github从入门到放弃(1)
  • HTTP中的ETag在移动客户端的应用
  • Linux下的乱码问题
  • Rancher-k8s加速安装文档
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • ucore操作系统实验笔记 - 重新理解中断
  • 安卓应用性能调试和优化经验分享
  • 大型网站性能监测、分析与优化常见问题QA
  • 记录一下第一次使用npm
  • 普通函数和构造函数的区别
  • 思维导图—你不知道的JavaScript中卷
  • 提醒我喝水chrome插件开发指南
  • Mac 上flink的安装与启动
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 带你开发类似Pokemon Go的AR游戏
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​io --- 处理流的核心工具​
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ​Linux·i2c驱动架构​
  • !!Dom4j 学习笔记
  • (aiohttp-asyncio-FFmpeg-Docker-SRS)实现异步摄像头转码服务器
  • (el-Date-Picker)操作(不使用 ts):Element-plus 中 DatePicker 组件的使用及输出想要日期格式需求的解决过程
  • (Java入门)学生管理系统
  • (LeetCode C++)盛最多水的容器
  • (LLM) 很笨
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (超详细)语音信号处理之特征提取
  • (第三期)书生大模型实战营——InternVL(冷笑话大师)部署微调实践
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (三)Hyperledger Fabric 1.1安装部署-chaincode测试
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转载)Google Chrome调试JS
  • .md即markdown文件的基本常用编写语法
  • .Net Core 微服务之Consul(二)-集群搭建