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

中山火天智能科技有限公司 2026/09/09 18:01:53

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 };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

网站建设计划书福田网站建设

.NET老哥的CMS文档神器:UEditor插件680元搞定!兄弟,作为刚接企业官网外包的.NET程序员,我太懂你这需求了——客户要新闻发布模块

2026/06/30 10:13:49

住房和城乡建设部网站东莞网站建设公司

文件共享与匿名发布系统中的信任问题剖析在当今数字化时代,文件共享和匿名发布系统变得越来越重要。然而,这些系统面临着诸多挑战,包括安全攻击、内容认证以及搜索机制的可靠性等问题。下面我们将深入探讨这些系统

2026/06/30 13:18:35

乐清网站建设杭州网站建设公司

Qwen2.5-VL-3B-Instruct-AWQ深度解析:多模态AI的突破性进展与实践教程【免费下载链接】Qwen2.5-VL-3B-Instruct-AWQ项目地址: https:

2026/06/30 13:57:08

北京高端网站建设江津网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:开发一个快速原型模板,帮助用户在WPS中快速创建以下工具&#x

2026/06/30 11:36:56

寿光网站建设大良网站建设

你是否曾经为AI模型推理时的漫长等待而烦恼?当用户同时发送多个请求时,你的服务是否频繁出现响应超时?本文将通过实战案例,为你揭秘如何在Swift

2026/06/30 10:25:20

佛山网站建设旅游网站建设

Datadog 与 IndexTTS2 的深度集成:构建可运维的本地语音合成系统在 AI 驱动的语音交互场景中,文本转语音(TTS)已不再是实验

2026/06/30 14:08:39

网站建设工作室滨州网站建设

快速体验打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容:设计一个Windows系统优化工具,专注于预防0X000000

2026/06/30 11:12:24

网站建设费用莆田网站建设

随着大模型技术在各行业的快速落地,大模型算法工程师已成为人工智能领域最具竞争力的岗位之一。据统计,2025年AI技术岗年薪50万+职位占比达31%,但

2026/06/30 11:59:28

怎样建设网站网站建设规划

Qwen3-VL与镜像级授权机制的技术融合探索在人工智能模型日益复杂、部署场景愈发多样的今天,如何将一个强大的视觉语言模型安全、稳定地交付到最终用户手中,已成为AI产品化过

2026/06/30 12:19:00

六安网站建设塘沽网站建设

Live Charts 终极图表库完整使用指南:从入门到精通【免费下载链接】Live-Charts项目地址: https://gitcode.com/gh_mirrors/liv/Liv

2026/06/30 14:08:39