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

代码随想录算法训练营第四十三天|动态规划part10

300.最长递增子序列

题目链接:代码随想录

文章讲解:代码随想录

错误解答:

dp[i]表示前i个元素的最长递增子序列的长度

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

错误原因,这里是默认第一个元素就是最长递增子序列的一部分了

正确解答:

1.明确dp数组含义
dp[i]表示以nums【i】为结尾的最长递增子序列的长度

2.转移方程

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

3.初始化

dp【0】=1

4.遍历顺序

正序遍历

class Solution {
public:int lengthOfLIS(vector<int>& nums) {vector<int>dp(nums.size(),1);//这里初始化为1dp[0]=1;int ans=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]>ans) ans=dp[i];}return ans;}
};

注意!!!!!!!!!

初始化dp数组要为1,不能初始化为0,因为dp数组的含义是以nums【i】为结尾的最长递增子序列的长度,所以一开始就是1,自身为子序列,就是1。

674. 最长连续递增序列

题目链接:674. 最长连续递增序列 - 力扣(LeetCode)

文章讲解:代码随想录

思路:

简单题,设计一个计数器,如果当前数比上一个数大,则计数器加一,否则重置计数器。

取最大的计数器就是答案。

class Solution {
public:int findLengthOfLCIS(vector<int>& nums) {int result=1;int ans=1;for(int i=1;i<nums.size();i++){if(nums[i]>nums[i-1]){ans++;if(ans>result)result=ans;}else{ans=1;                }}return result; }
};

718. 最长重复子数组

题目链接:718. 最长重复子数组 - 力扣(LeetCode)

文章讲解:代码随想录

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

为什么是i-1和j-1 

是为了初始化的方便

否则初始化要视情况而定

class Solution {
public:int findLength(vector<int>& nums1, vector<int>& nums2) {vector<vector<int>>dp(nums1.size()+1,vector<int>(nums2.size()+1,0));int result=0;//dp[i][j]表示nums1中i-1为结尾nums2中以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;}result = std::max(result, dp[i][j]);}}return result;}
};

http://www.dtcms.com/a/265246.html

相关文章:

  • 2025-6GESP六级编程题分析
  • 如何保证缓存和数据库的双写一致性
  • Python训练营Day1
  • 软件测试用例大全
  • 基于大模型的智能体中由自主性引发的安全风险综述
  • CLIP heat map generation
  • 【深度学习:进阶篇】--4.2.词嵌入和NLP
  • MinHook 如何对 .NET 母体 CoreCLR 进行拦截
  • 在米联客4EV上部署tinyriscv
  • 【深度学习新浪潮】国内零样本抗体设计的科研进展如何?
  • docker-compose.yml 文件详解——AI教你学Docker
  • 从一个开发的角度切入mysql索引,查询优化
  • C Primer Plus 第6版 编程练习——第6章(上)
  • 设计模式-享元模式
  • JAVA内存区域划分
  • WEB测试总结
  • ubuntu 安装neo4j
  • 七、分工说明
  • 南方大暴雨及洪水数据分析与可视化
  • 爬虫从入门到精通(22) |TLS指纹
  • 【RHCSA-Linux考试题目笔记(自用)】servera的题目
  • 【C++】--入门
  • HTTPS详解:原理 + 加解密过程 + 面试问答
  • SpringBoot:整合quartz实现定时任务-基础篇
  • 从零用java实现 小红书 springboot vue uniapp (12)实现分类筛选与视频笔记功能
  • uniapp 滚动tab
  • autoware calar 联合运行,自动驾驶虚拟仿真器
  • ESP32S3开发:实现WiFi扫描与连接功能
  • 插值与拟合(3):B样条曲线
  • MySQL 用户管理与权限控制