杭州营销型网站建设滁州网站建设

福怡嘉快餐 2026/09/09 17:49:12

300.最长递增子序列

文章讲解/视频讲解

题目描述:

给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。

子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。

示例 1:

  • 输入:nums = [10,9,2,5,3,7,101,18]
  • 输出:4
  • 解释:最长递增子序列是 [2,3,7,101],因此长度为 4 。

示例 2:

  • 输入:nums = [0,1,0,3,2,3]
  • 输出:4

示例 3:

  • 输入:nums = [7,7,7,7,7,7,7]
  • 输出:1

提示:

  • 1 <= nums.length <= 2500
  • -10^4 <= nums[i] <= 104

思路:
1.dp数组及其下标含义:这是本题的重中之重,本题的dp[i]表示i之前包括nums[i]结尾的最长递增子序列

2.状态转移方程:位置i的最长递增序列,等于 j 从 0 到 i - 1的最长递增序列 + 1(位置i本身),也就是我们去找最大的dp[j] + 1,

if (nums[i] > nums[j]) {

dp[i] = Math.max(dp[i], dp[j] + 1)

}

3.dp数组的初始化:所有位置最开始起码都是1,所以全部初始化为1

4.确定遍历顺序:本题一共有两层for循环,外层遍历i,内层遍历j,外层遍历的i是一定要从小到大遍历的,要不然拿不到前面的数据,内层的j无所谓从前还是从后,只要是0到i - 1这个范围就行了

5.举例推导dp数组

输入:[0,1,0,3,2],dp数组的变化如下:

如果代码写出来,但一直AC不了,那么就把dp数组打印出来,看看对不对!

代码示例:

function lengthOfLIS(nums: number[]): number { const length: number = nums.length const dp: number[] = new Array(length).fill(1) let res: number = 0 for (let i = 0; i < length; i++) { for (let j = 0; j < i; j++) { if (nums[i] > nums[j]) { dp[i] = Math.max(dp[i], dp[j] + 1) } } res = Math.max(res, dp[i]) } return res };

674.最长连续递增数列

文章讲解/视频讲解

题目描述:

给定一个未经排序的整数数组,找到最长且 连续递增的子序列,并返回该序列的长度。

连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

示例 1:

  • 输入:nums = [1,3,5,4,7]
  • 输出:3
  • 解释:最长连续递增序列是 [1,3,5], 长度为3。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。

示例 2:

  • 输入:nums = [2,2,2,2,2]
  • 输出:1
  • 解释:最长连续递增序列是 [2], 长度为1。

提示:

  • 0 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9

思路:

本题相比上一题其实跟像退阶版本,因为连续意味着我们不必比较nums[j]和nums[i],只需要比较nums[i]和nums[i -1]的大小即可

1.确定dp数组及其下标含义:dp[i]表示以i为结尾的连续递增子序列为dp[i]

2.确定递推公式:如果 nums[i] > nums[i - 1],那么以 i 为结尾的连续递增的子序列长度 一定等于 以i - 1为结尾的连续递增的子序列长度 + 1 。即:dp[i] = dp[i - 1] + 1

3.dp数组的初始化:虽然是连续递增子序列,但是每个序列开始时起码都为1,依旧全部初始化为1

4.确定遍历顺序:由于dp[i]依赖于dp[i - 1],所以一定是从前往后遍历的

5.举例推导dp数组

已输入nums = [1,3,5,4,7]为例,dp数组状态如下:

注意这里要取dp[i]里的最大值,所以dp[2]才是结果!

代码示例:

function findLengthOfLCIS(nums: number[]): number { const length: number = nums.length const dp: number[] = new Array(length).fill(1) let res: number = 1 for (let i = 1; i < length; i++) { if (nums[i] > nums[i - 1]) { dp[i] = dp[i - 1] + 1 } res = Math.max(res, dp[i]) } return res };

718.最长重复子数组

文章讲解/视频讲解

题目描述:

给两个整数数组 A 和 B ,返回两个数组中公共的、长度最长的子数组的长度。

示例:

输入:

  • A: [1,2,3,2,1]
  • B: [3,2,1,4,7]
  • 输出:3
  • 解释:长度最长的公共子数组是 [3, 2, 1] 。

提示:

  • 1 <= len(A), len(B) <= 1000
  • 0 <= A[i], B[i] < 100

思路:
本题我们考虑用一个二维数组记录两个字符串,这样就能轻松比较二者重复字母

1.确定dp数组及其下标含义:dp[i][j] :以下标i - 1为结尾的A,和以下标j - 1为结尾的B,最长重复子数组长度为dp[i][j]。 (特别注意: “以下标i - 1为结尾的A” 标明一定是 以A[i-1]为结尾的字符串 ),注意这里这么写了就表示dp数组就一定是从dp[1][1]开始的

2.确定递推公式:

根据dp[i][j]的定义,dp[i][j]的状态只能由dp[i - 1][j - 1]推导出来。

即当A[i - 1] 和B[j - 1]相等的时候,dp[i][j] = dp[i - 1][j - 1] + 1;

3.dp数组的初始化:按照dp数组的定义来讲,dp[0][0]其实没有意义,你总不能是以下标-1为结尾的A数组吧。但是为了遍历能正常进行,我们还是把dp[0][0]设置成0,只有这样dp[1][1]才能等于dp[0][0] + 1,后续的dp数组也才能够递增下去

4.确定遍历顺序:本题外层放a还是b其实无所谓,最重要的确保双层循环即可,而且从前往后遍历

5.举例推导dp数组

拿示例1中,A: [1,2,3,2,1],B: [3,2,1,4,7]为例,画一个dp数组的状态变化,如下:

代码示例:

function findLength(nums1: number[], nums2: number[]): number { const length1: number = nums1.length const length2: number = nums2.length const dp: number[][] = new Array(length1 + 1).fill(0).map(_ => new Array(length2 + 1).fill(0)) let res: number = 0 for (let i = 1; i <= length1; i++) { for (let j = 1; j <= length2; j++) { if (nums1[i - 1] === nums2[j - 1]) { dp[i][j] = dp[i - 1][j - 1] + 1 res = Math.max(dp[i][j], res) } } } return res };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

岳阳网站建设旅游网站建设

Qwen3-VL多模态推理突破:数学STEM题准确率大幅提升在智能教育、科研辅助和工业自动化快速发展的今天,一个核心问题日益凸显:AI能否真正“理解”图文并茂

2026/06/30 11:45:27

杭州网站建设怎么网站建设

2025最新!专科生毕业论文必看!10个AI论文平台深度测评与推荐2025年专科生论文写作工具测评指南随着人工智能技术的不断进步,AI论文平台逐渐成为高校学生

2026/06/30 12:58:33

嘉兴网站建设顺德网站建设

企业微信通知多语言推送:Hunyuan-MT-7B定制开发实践在一家跨国能源集团的日常运营中,总部发布了一则关于设备检修的安全公告。这条原本用中文撰写的通知,

2026/06/30 10:30:20

网站建设规划书宜昌网站建设

第一章:C# 跨平台方法拦截概述在现代软件开发中,C# 不仅活跃于 Windows 平台,也通过 .NET Core 和 .NET 5+ 实现了真正的

2026/06/30 10:45:21

广州企业网站建设网站建设哪家

语音克隆结合HeyGem:打造专属声线+数字人完整解决方案在虚拟主播24小时不间断直播、企业宣传视频批量生成、在线课程快速迭代的今天,内容创作的“工业化”需求正以前

2026/06/30 13:08:04

网站建设系统大连网站建设

5步诊断法:彻底解决WSL环境中Open-Interpreter无法连接本地模型的难题【免费下载链接】open-interpreterOpen Interpreter 工具能够让大型语言

2026/06/30 10:39:21

网站建设论坛六安网站建设

深夜的实验室里,咖啡杯沿已经冷透,屏幕上闪烁的光标仿佛在嘲笑我的写作瓶颈——这是每个研究者都熟悉的场景,直到我发现了一种不同的可能性。深夜两点,

2026/06/30 11:15:54

滁州网站建设龙岩网站建设

TensorRT推理引擎的安全性与稳定性分析在现代AI系统部署中,一个常见的挑战是:模型在实验室里表现优异,但一旦上线就出现延迟波动、显存溢出甚至输出不一致的

2026/06/30 11:31:56

厦门网站建设网站建设与维护

目录8.1图像色彩调整基础8.1.1 色彩模式的转换1. 色彩模式转换注意问题2. 各种色彩模式之间的转换8.1.2 图像的色调调整1. 色阶与自动色阶2. 曲线调整3. 亮度与对比度命令4. 色彩平

2026/06/30 10:12:49