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

[豪の算法奇妙冒险] 代码随想录算法训练营第四十三天 | 300-最长递增子序列、674-最长连续递增序列、718-最长重复子数组

代码随想录算法训练营第四十三天 | 300-最长递增子序列、674-最长连续递增序列、718-最长重复子数组


LeetCode300 最长递增子序列

题目链接:https://leetcode.cn/problems/longest-increasing-subsequence/description/

文章讲解:https://programmercarl.com/0300.最长上升子序列.html

视频讲解:https://www.bilibili.com/video/BV1ng411J7xP/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[i]表示i之前包括i的以nums[i]为结尾的最长严格递增子序列的长度

  1. 确定递推公式

​ i在后,j在0到i之间,如果nums[i]大于nums[j],dp[i] = Math.max(dp[i], dp[j]+1)

  1. dp数组如何初始化

​ dp数组所有下标初始化为1,因为每个元素其本身也算作一个严格递增子序列

  1. 确定遍历顺序

​ 外层for循环,i从1开始往后顺序遍历;内层for循环,j从0遍历到i

  1. 举例推导dp数组

image-20260220215509773

class Solution {public int lengthOfLIS(int[] nums) {int[] dp = new int[nums.length];for(int i = 0; i < nums.length; i++){dp[i] = 1;}int result = 1;for(int i = 1; i < nums.length; i++){for(int j = 0; j < i; j++){if(nums[j] < nums[i]){dp[i] = Math.max(dp[i], dp[j] + 1);}}result = Math.max(result, dp[i]);}return result;}
}

LeetCode674 最长连续递增序列

题目链接:https://leetcode.cn/problems/longest-continuous-increasing-subsequence/description/

文章讲解:https://programmercarl.com/0674.最长连续递增序列.html

视频讲解:https://www.bilibili.com/video/BV1bD4y1778v/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[i]表示i之前包括i的以nums[i]为结尾的最长连续递增子序列的长度

  1. 确定递推公式

​ 如果nums[i]大于nums[i-1],则dp[i] = dp[i-1]+1;否则,dp[i] = 1

  1. dp数组如何初始化

​ dp[0] = 1

  1. 确定遍历顺序

​ 一层for循环,i从1开始往后顺序遍历

  1. 举例推导dp数组

image-20260220221149269

class Solution {public int findLengthOfLCIS(int[] nums) {int[] dp = new int[nums.length];dp[0] = 1;int result = 1;for(int i = 1; i < nums.length; i++){if(nums[i] > nums[i-1]){dp[i] = dp[i-1] + 1;}else{dp[i] = 1;}result = Math.max(result, dp[i]);}return result;}
}

LeetCode718 最长重复子数组

题目链接:https://leetcode.cn/problems/maximum-length-of-repeated-subarray/description/

文章讲解:https://programmercarl.com/0718.最长重复子数组.html

视频讲解:https://www.bilibili.com/video/BV178411H7hV/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 动规五部曲:

  1. 确定dp数组以及下标的含义

​ dp[i][j]表示以i-1为结尾的nums1和以j-1为结尾的nums2,二者中公共的长度最长的子数组长度

  1. 确定递推公式

​ 如果nums1[i-1] == nums[j-1],那么dp[i][j] = dp[i-1][j-1] + 1

  1. dp数组如何初始化

​ 全都初始化为0

  1. 确定遍历顺序

​ dp[i][j]中的i是以i-1为结尾的nums1,j是以j-1为结尾的nums2,所以两层for循环都是从1开始顺序遍历到nums1.length/nums2.length

  1. 举例推导dp数组

image-20260220223852182

class Solution {public int findLength(int[] nums1, int[] nums2) {int[][] dp = new int[nums1.length+1][nums2.length+1];int result = 0;for(int i = 1; i <= nums1.length; i++){for(int j = 1; j <= nums2.length; j++){if(nums1[i-1] == nums2[j-1]){dp[i][j] = dp[i-1][j-1] + 1;}result = Math.max(result, dp[i][j]);}}return result;}
}
http://www.jsqmd.com/news/397360/

相关文章:

  • 移动开发如何巧用 RxJava 优化代码
  • 深度强化学习TD方法:核心算法、实战场景与优化全解析
  • 深度学习框架MXNet深度解析:从核心算法到工业部署实战
  • 彻底禁止win11系统更新的方法,关闭win11自动更新的教程
  • 一键彻底禁止Win11自动更新6大方法,Win11系统的自动更新怎么彻底关闭?
  • 2026年论文赶due神器深度测评:一站式搞定全流程的多模型AI工作台选型指南 - 小白条111
  • 图像分类实战
  • 支持多语种的9个AI降重平台,提供改写、扩写、缩写全功能,满足不同场景文本优化需求
  • 并查集 - [JSOI2008] 星球大战
  • 2026年论文降AI味工具选型指南:多模型协同如何解决单一AI的“模板化陷阱” - 小白条111
  • 模拟与存根实战:unittest.mock深度使用指南
  • HarmonyOS 6.0分布式应用开发全解析:从架构革新到跨设备协同实战
  • 如何在豆包平台打广告,找哪个服务商? - 品牌2025
  • 手把手还你一个清爽的windows!---激活和清爽配置教程
  • 白血病细胞与正常细胞识别数据集:医学影像与智能诊断的细胞分析数据
  • 抢占AI流量新风口:doubaoAD如何助力企业实现豆包平台高效获客 - 品牌2025
  • 2026年论文急救AI工具选型指南:多模型协同如何解决due前3天的核心痛点 - 小白条111
  • 推荐9款高效AI降重工具,改写效果显著提升文本原创性,适用于论文及各类文稿的重复率优化需求
  • 9个超好用的AI降重网站,一键改写文章,效果惊艳。轻松解决重复率问题,写作必备工具清单
  • 这些AI降重网站绝了!9款工具改写效果拔群,三秒降低重复率,学术写作党赶紧收藏备用
  • 题解:AcWing 795 前缀和
  • 端侧AI爆发!AMD新芯片本地跑大模型,开发教程来了
  • 堆的基本存储
  • flask基于Spark的温布尔登特色赛赛事数据分析预测及算法实现
  • 空对象模式
  • 从IPD实践者到研发体系架构师(三):战略解码与流程锚定促成IPD流程的新增与强化活动设计
  • 2/20日随笔
  • 从IPD实践者到研发体系架构师(四):在经典IPD阶段关卡基础上,如何融入敏捷迭代、DevOps循环和客户共创触点?
  • 麦肯锡全球总裁Bob Sternfels:每个员工都会有自己的AI智能体
  • 102类农业害虫图像识别数据集:智慧农业与精准防控的高质量资源