自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(59)
  • 收藏
  • 关注

原创 滑动窗口学习笔记(基础部分)

首先设置变量ans和cur,因为数组中可能包含负值,所以ans变量的初值便不能设置为0,设置为一个相对较小的负数,遍历整个字符串,遵循三个步骤:进入,统计,退出,这道题的进入即:将当前遍历的元素加入cur,如果当前便利的数量不足k-1个则跳过退出步骤以及统计步骤。这句话也就代表着符合条件的minSize长度的子串也必定是符合条件的maxSize长度子串的子串,二者属于包含的关系,所以我们只需要找到符合条件的窗口大小为minSize的子串即可。,第二小的数是负数 -1。,第二小的数是负数 -2。

2024-09-04 16:26:39 353

原创 Rabin-carp算法学习笔记

3)滑动窗口:将文本中的哈希窗口从左到右滑动,在每次滑动时计算新窗口的哈希值并与模式的哈希值进行对比,若哈希值相同进一步检查是否完全匹配。是一种用于字符串匹配的算法,特别适用于在一个较大的文本中查找一个或多个子字符串的场景。2)计算文本初始窗口的哈希值:然后计算文本中与模式长度相同的第一个子字符串的哈希值。1)计算模式的哈希值:计算需要查找的子字符串(模式)的哈希值。

2024-09-03 10:21:54 229

原创 Matlab数据处理学习笔记

2)any函数用于检测制定逻辑数组中是否存在true的值,可以指定检测的维度。对于此用途,它用来找出包含缺失值的行号。1)ismissing函数用于检测是否存在缺失值。1.1 :缺失值检测和处理。函数用于返回逻辑数组中。2.2:异常值检测和处理。

2024-08-01 15:26:13 373

原创 非线性规划例题

1、先试用蒙特卡洛模拟优先求出最优的初始值X0。2、使用函数:fincon求解最优解。

2024-07-19 22:38:58 188

原创 线性规划例题

找到第一个大于0.21的值。

2024-07-07 17:35:07 216

原创 数学建模整数规划学习笔记

与线性规划的本质区别在于决策变量是否取整。(1)分支定界法若不考虑整数限制先求出相应松弛问题的最优解:若松弛问题(线性规划)无解,则ILP(整数规划)无解。若求得的松弛问题最优解符合整数要求,则是ILP的最优解;若不满足整数条件,则任选一个不满足整数条件的变量Xi来构造新的约束添加到松弛问题中形成两个子问题:增加两个约束条件:决策变量 <= 决策变量向下取整,决策变量大于 >= 决策变量向下取整 + 1.intprog函数:status:判断是否有解:大于0表示有解,小于0表示无解。

2024-06-21 22:45:33 477

原创 数学建模理论学习:线性规划模型

目标函数:z = ax1 + bx2 + cx3 + ...三要素:目标函数、约束条件(s.t.)、决策变量(x)其中c为一个序列,从左到右依次从x1到xn的系数。

2024-06-20 00:40:47 283

原创 matlab入门基础笔记

这里的' .* '中的' . '是逐运算符,这表示对向量或者矩阵元素x中的元素进行逐一计算,当我们需要进行乘或除运算时,log(1 + x)并不支持矩阵的乘法。@(x): 是创建匿名函数(anonymous function)的语法。匿名函数是一种没有名称的函数,通常用于临时性或简单的函数定义。使用@(x)语法可以定义一个接受输入参数x的匿名函数。

2024-06-19 00:35:43 434

原创 深度学习第二章学习笔记

标准差(Standard Deviation, 简称SD)是一种用于量化数据集中每个值相对于平均值(均值)的分散程度的统计指标。它反映了数据的离散程度,即数据点与均值的偏离程度。每个分类变量的每个水平(category)都会被转换成一个新的二进制列。(2)如果不原地更新,其他引用依然会指向就得内存位置,这样我们的某些代码会引用旧的数据。6、获取特定的形状的服从高斯分布的随机元素张量(均值为0,标准差为1)(1)我们不想总是不必要的分配内存,我们希望原地执行这些更新。创建了一个两层三行四列的全为0的张量。

2024-06-17 01:01:02 1013

原创 第十三届蓝桥杯B组c++国赛

明确我们的目的:将数字改的尽可能的大,我们的限制条件是:opt_1操作次数不能超过A次,opt_2操作不能超过B次:我们可以先判断opt_2的数量是否大于当前数字cur + 1,如果不大于就只选择opt_1不再进行opt_2操作,如果当opt_2的数量大于cur + 1, 那么就优先将opt_2的数量消耗掉,因为opt_2只能通过正好将cur变成9才会变大,而opt_1无论怎样都会使数字变大。这道题就是一个迪杰斯特拉的模板题,让我们找到一条从城市1出发到达城市n的最短路径,注意优先队列中元素排列的顺序。

2024-05-31 01:11:24 746

原创 蓝桥杯第十四届国赛B组刷题笔记

的长度被包含在某个区间内,则将其视为被这个区间框住,那么我们就可以推断出只要该区间中点在我们的框区间内,那么就算我们框住了这个区间,所以我们呢只需要存储所有区间的中点数据,然后我们便利我们每一次的框区间数据,遍历有序数列,找到第一个大于框左边界的中点和第一个大于框右边界的中点。这道题有一个关键点在于:合并的两个数必须是相邻的,这样会大大降低了我们的思考难度,所以我们的暴力策略就是:遍历这两个数组,如果a[i] > b[i]那么我们就将b[i]加上b[i + 1]一直到与a[i]相等,起点保证是 A 格子。

2024-05-27 14:37:57 969

原创 基环树学习笔记

这道题的难点和不同点在于当球树枝上的节点的访问计数时,我们会发现比较难处理,因为在参加会议的最多员工数拿到题目中,我们可以通过拓扑排序之后找到基环并通过基环的大小锁定需要求的熟知的根节点然后从根节点开始处理便可以求得这树枝的大小,而这道题我们无法定位到根节点。知道这是一个内向基环图之后,我们就可以思考参加会议的人数,这个参加会议的人的可能性有三种,一种是在基环上的所有节点,这些人可以参加会议,一种是当基环节点数为2时,这是参加会议的人数为基环上的两个点加上这两点的树枝长度。访问的不同节点数是 3。

2024-05-21 21:22:20 664

原创 拓扑排序学习笔记

在第二部如何判断是否呢能够到达所有的点:这里我们采用更新入度的方式来进行处理,也就是再将当前节点处理完之后,将该节点的边全部删掉,从而更新与之相连的节点的入度数,再讲入度为0的点加入到队列中去,每次从队列中取出预处理节点之后进行处理:将其状态更新为已访问,然后遍历与其相连的节点,将其相连节点的入度数更新-1,然后判断相连是否入度为0,入度为0便加入到队列中。学习课程 1 之前,你需要完成课程 0。我的思路是先找到入度为0的点然后从这些点出发看是否能够到达所有点。把所有入度不为0的点排除就是入度为0的点。

2024-05-16 21:05:21 747

原创 位运算学习笔记

表示包含了全部 3 个元素的子集。也就是从000 一直遍历到111,这其中包含了这三位数字组成的所有子集。对子集s进行右移操作,从而检查每一个节点是否在当前子集中。这个二进制数表示了一个包含了全部。,我们可以生成一个二进制数,其有。就等于 8,对应的二进制为。

2024-05-16 16:41:06 85

原创 Floyd算法笔记

建立check函数,首先将当前自己对应的邻近矩阵传入到f,防止破坏原邻接矩阵,然后我们利用floyd算法得出每个节点对之间的最短距离,然后在进行对当前子集进行判断:枚举当前子集的每一位二进制数字,如果当前节点不在子集中就跳过,然后我们判断当前节点的所有边是否合法,如果不合法返回false,再循环完成后返回true,证明当前传入的子集是合法的一个选择。- 关闭分部集合 [2] ,剩余分部为 [0,1] ,它们之间的距离为 2。- 更改下标 2 处的值 'e' 为 'b' ,成本为 2。

2024-05-16 16:38:39 616

原创 Kruskal算法刷题笔记

这道题的总体思路是:先将所有边进行权值排序优先选择权值小的边,然后从权值最小的边开始判断该边左右两点是否为同一个祖先,如果为同一祖先那么联通图中就存在环,否则我们就将这两点加入到联通图中,这里就用到了我们并查集的思路。最小生成树问题解决的都是求所给带权有向图中的所有节点的最小连通子图,prim算法是从节点的角度出发,不断选择里最小生成树最近的节点从而达到最小联通子图,而kruskal算法是从边的角度出发,对边的权值进行排序,优先选择权值最小的边加入到最小生成树中,从而构成最小联通子图。顶点编号是从1到V。

2024-05-12 16:35:48 394

原创 迪杰斯特拉算法刷题笔记

在第一层循环我们需要将到源点最近距离minval设置为INT_MAX,接着遍历所有的点,找出未被访问过的点以及到源点的距离小于初始值minval的,遍历完这n个点之后我们就可以得出距离远点最近的节点。然而,途中的各个车站之间的道路状况、交通拥堵程度以及可能的自然因素(如天气变化)等不同,这些因素都会影响每条路径的通行时间。这里跟prim算法不一样的地方就是第一步,prim算法要找的是距离生成树最近的节点,而迪杰斯特拉算法找的是距离。(3)更新该点相连的点的mindist:距离远点的最近路程。

2024-05-12 11:07:50 322

原创 最小生成树刷题笔记

首先我们利用一个for循环遍历n - 1遍,因为我们从第1个节点开始将其加入到生成树之中后知道添加到还剩两个节点时,我们可以发现当我们添加玩倒数第二个节点后,最后一个节点的mindist数值在处理倒数第二个节点的第三部更新过程中已经得到了,这个距离不是倒数第二个节点到它的距离grid[cur][j]就是之前已经得到的它与某个节点之间的距离mindist[j]。// cur节点加入之后, 最小生成树加入了新的节点,那么所有节点到 最小生成树的距离(即minDist数组)需要更新一下。// 从第一个点开始。

2024-05-11 01:35:37 352

原创 并查集刷题笔记

(1)我们需要明确的一点是join操作中当我们所要链接的两个点同根时,会直接返回,并不会进行下面的操作,从而对联通分量的数目进行-1操作,这也是的我们最后求出的setcount数量就是图中联通分量的个数,将这些所有的联通分量连接起来组成一个全连通分量就是最后的我们的结果,也就是setcount - 1.首先判断当前传入的两点是否存在同根现象,首先进行寻根,如果两点的根是同一个节点,那么这两点属于同一集合无需相连,如果两点的根不同说明不在同一个集合之中,就将两点相连:father[v] = u;

2024-05-10 20:46:05 773

原创 Excel解日期问题

所以我们需要对start_num做一定的修改,将一个1-8的数组作为start_num,也就是对每一位数字。计算两个或多个数组对应元素的乘积,然后对乘积求和。就是求解由mid函数得出的数字数组的个元素的和。=MONTH(需要处理的日期单元格:A1)=YEAR(需要处理的日期单元格:A1)在 Excel 中,求模运算使用的是。=DAY(需要处理的单元格:A2)函数返回的结果是除以除数后的余数,而不是结果。这里我们需要提取八位日期数字中的每一位数字。进行提取,提取后会在一个8行的数组中。

2024-05-09 01:10:29 669

原创 第十二届蓝桥杯真题做题笔记

我们在这里将dp数组设为:前i个元素能否凑成j的bool值,将dp[0][0]初始化为0,接着然后我们遍历dp数组,如果dp[i - 1][j] = true呢么i个元素也一定可以凑成j,所以dp[i][j] = true,然后开始扩散:dp[i][j + nums[i]] = true,dp[i][j - nums[i]] = true,dp[i][nums[i] - j] = true;你有一架天平和 �N 个砝码,这 �N 个砝码重量依次是 �1,�2,⋅⋅⋅,��W1​,W2​,⋅⋅⋅,WN​。

2024-04-11 18:42:52 1059

原创 代码随想录算法训练营第43天 | 1049.最后一块石头的重量II, 494.目标和

有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。如果x == y,那么两块石头都会被完全粉碎;如果x!= y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回0。示例 1:1组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],

2024-04-10 10:31:12 469

原创 代码随想录算法训练营第44天 | 518:零钱兑换II ,

只需要将第一行进行初始化即可,这里我们只需要判断当前背包是否大于nums【0】,如果背包大于nums[0]就赋值为nums[0]不然的话就保持为0。需要注意的是我们在内循环遍历背包时我们需要注意当前的背包容量是否大于遍历到的元素的重量,如果元素的重量更大就不选取该元素。本题求的是背包的最大容量与顺序并没有关系所以可以先遍历背包也可以先遍历物品。请你判断是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。数组可以分割成 [1, 5, 5] 和 [11]。数组不能分割成两个元素和相等的子集。

2024-04-10 00:53:41 186

原创 第十三届蓝桥杯b组做题笔记

由于状态转移方程是:dp[i][j][k] == dp[i - 1][j][k / 2] + dp[i][j - 1][k - 1],所以我们要依次进行这两个判断并将其结果加在原dp[i][j][k]上。这里我当时就有一个疑问:问什么要加上dp[i - 2][3]呢?dp[0][3]为1个I型竖放,dp[1][1]与dp[1][2]都为1,dp[1][3]为两I型竖放+两I型横放。由于是求组合数所以我们要将dp[0][0]置为1,然后后面的就根据情况来看:dp[0][1]与dp[0][2]为0,

2024-04-08 18:54:42 742

原创 第十四届蓝桥杯c++组B组做题笔记

然后对于公式,我们注意到h是一个浮点数为了方便处理,我们将h处理为整数,直接将其乘以10的n次方消去小数点,然后我们开始列公式,这个公式中存在p0,p1两个概率值是浮点数,而我们所求的h是一个longlong类型的数据,所以我们需要将这两个概率值单列出来求解,采用double类型处理这两个数据,然后再带入公式中,这里我们的概率是有两个longlong类型的数据相除得到的,所以我们为了得到的数据是double类型的,我们需要在对其中一个数据 * 1.0使其变为double类型的数据。

2024-04-07 23:16:08 2285 4

原创 图论做题笔记:bfs

首先建立一个处理队列,将start加入其中,此时队列中的元素表示未处理的元素,接下来记录当前层的大小,遍历当前层的元素(只有start一个),接着对字符串进行处理,这里我们创建一个数组来存储字符可变化的样子(也就是方向数组),从当前处理的字符串的头开始向后遍历,一一替换当前遍历到的位置,如果替换后的字符串可以在bank中找到并且没有被访问过我们就将其加入que的第二层,在遍历完当前层元素后step++代表变换元素的次数。记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。所需的最少变化次数。

2024-04-01 23:49:22 940

原创 代码随想录算法训练营第41天 | 343:整数拆分, 96:不同的二叉搜索树

(3)状态转移方程:这里我们用到了两层循环,外层循环是求目标数,内层循环是选取不同的节点作为头结点,各自的搜索树数量。以m为头结点的搜索树,其左子树有m-1个元素,其右节点有n-m个(减去头节点)。这里我们需要注意的是第二个max才是体现我们动态规划思想的重要一步。(1)确定dp数组含义:dp[i]表示i个元素的二叉搜索树的种类。因为j的拆分已经在第一层for循环求过了。返回满足题意的二叉搜索树的种数。dp[i]表示拆分整数i的最大成绩和。),并使这些整数的乘积最大化。(2)初始化,dp[0] = 1。

2024-04-01 19:37:57 367

原创 图论做题笔记:dfs

因为上一道题就像是链表的结构,一个点可以连接多个点,我们可以想象成树的结构来做,我们在遍历树寻找节点的时候在深搜的同时必须伴随着回溯使得我们不会落下任意一个路径,二这道题不一样的点在于给了我们一个二维的空间图,在寻找特定点时我们只管往前走不需要考虑有便利不到的情况因为next(x,y)会将四个方向的点都处理一遍。我们引入一个二维的数组visit来记录每个点的访问情况,当传入一个点时,我们直接将其标记为已访问过,然后我们利用opt数组来向四个方向进行搜索,如果搜索的点合法我们继续递归搜索。

2024-03-30 21:37:04 651

原创 代码随想录算法训练营第39天 | 62.不同路径, 63不同路径II

状态转移方程:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]但这里我们需要注意的是遇到障碍物我们要continue,肯定不能用break啊,因为我们又不知一种走的方法,也不想最外围那两条边只要路被堵了后面就坑定过不去了。初始化:我们需要对[i][0]和[0][i]这两条边进行初始化。状态转移方程:dp[i][j] = dp[i - 1][j] + dp[i][j - 1]因为只能向下或者向右走。dp[i][j]的含义:到达二维图的(i,j)点的路径条数。

2024-03-30 20:35:09 362

原创 代码随想录算法训练营第38天 | 509.斐波那契数, 70。爬楼梯, 746.使用最小花费爬楼梯

因为我们要等上第二级台阶需要有两种方式,我们的状态转移方程:res[i] = res[i - 1] + res[i - 2],所以我们就认定res[0] = 1,以便于后续处理。状态转移方程:dp[i] = dp[i - 1] + cost[i - 1], dp[i - 2] + cost[i - 2]- 支付 1 ,向上爬两个台阶,到达下标为 2 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 4 的台阶。- 支付 1 ,向上爬两个台阶,到达下标为 6 的台阶。你将从下标为 1 的台阶开始。

2024-03-30 20:02:35 462

原创 代码随想录算法训练营第37天 | 738.单调递增的数字,968.监控二叉树

还有一种特殊的情况就是两个孩子节点都是以覆盖的状态时,这不单单是描述叶子结点,还有一种可能是两个已覆盖状态孩子节点的父节点是根节点的时候,因为我们增加摄像机的操作仅仅是在左右孩子中出现未覆盖的情况下我们才加装摄像头,所以我们需要判断一下根节点是不是左右孩子都是已覆盖的状态,如果是就需要在加装一个摄像头。这道题我的第一感觉是要将每个数位上的数字放荡一个char的数组里,从最大数位上的数字往后遍历,如果一旦后面的数字小于了前一位的数字,就将后面的数字变为最大值9,然后前一位数字-1.的最大数字,且数字呈。

2024-03-30 17:49:43 610

原创 代码随想录算法训练营第36天|435.无重叠子区间 , 763.划分字母区间, 56.合并区间

但是我在记录结果的时候就犯了难,我认为是需要用到while来处理的,因为这里的right肯呢个是在不断更新的,如果没找到一次right就加入数组就不是最终结果了,这里对于left的更新是当遇到了不重叠的数组是我们就将left + 1处理。这道题删除重叠区间的最小值:我们可以想象为当我们遍历到了一个重叠的区间之后,我们会将当前区间的右边界会改变为min(s[i - 1][1], s[i][1]),选取前一个区间和本区间的最小右边界作为当前区间的右边界。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2024-03-30 15:34:15 978

原创 代码随想录算法训练营第35天|860.柠檬水找零、406根据身高重建队列、452.用最少数量的箭引爆气球

这道题的思路是:现考虑一个变量,将身高高的移动到队列前排,当两者身高一样的时候,就比较两者的插入顺序,将插入顺序小的排在前面便于先遍历到的时候先插入,拍完序后我们就遍历队列中的元素,将每个元素插入到它对应的位置即可。如果当前遍历的气球与上一个气球挨着的话我们就更改当前气球的右边界(因为弓箭需要射穿这两只挨着的气球,射中的位置必须要保证在两个区间内,呢么这个区间的右边界一定是两区间较小的右边界),如果不挨着的话我们就将弓箭数加一。对于未挨着的气球我们就直接res++。这就是我们求解局部最优解的步骤。

2024-03-26 23:33:37 126

原创 代码随想录算法训练营第34天 | 1005.k次取反后最大化的数组和、134.加油站、 135.分发糖果

所以我们的cur数组是一定>0的,接着来看,如果我们遇到一个节点时的前面的累加和为负数,那么根据我们总的cur>0可以想到,从这一点到最后一个点的所有的累加和一定是>0的不然两者相加不可能大于0,所以遇到了负数说明上一个区间的起点不合法,我们要从下一个节点开始。这道题的思路就是:先求出每个加油站对应的gas - cost,再从第1个加油站开始往后遍历,并不断的累加这些差值,如果累加的和 < 0,就说明前面这段路走不了,到不了下一个节点了,那么我们就从下一节点开始重新寻找。

2024-03-26 20:23:00 297

原创 蓝桥杯备赛笔记

有些题目要求再输入一个数m后,接着输入m个数字,这样的情况下我们一般是准备一个数组利用一个for循环来输入和存储。

2024-03-25 23:39:38 269

原创 代码随想录算法训练营第32天 | 122.买卖股票的最佳时机II 、

这里我们可以带入运算一下,第二天买入第三天卖出再第三天买入第四天卖出,得到利润为4 + 5 = 9,而跨度两天:第二天买入,第三天不动因为不能够买入,所持股票数不能超过1,所以第四天卖出,获得利润10 - 1 = 9.这样的利润是一致的,我们可以详细的拆分一下第一种情况:-1 + 5 - 5 + 10,会发现第三天只是一个媒介并不影响结果。这道题我最开始的思路是:选取当前节点所能够跳跃的区间内跳跃值最大的位置,然后将指针移动到那个位置,在循环的表层我们设置一个判断条件,判断当前节点能否到达最后一个节点。

2024-03-25 20:53:31 793

原创 代码随想录算法训练营第31天 | 455.分发饼干 、 376.摆动序列 、 53.最大子数组和

这里我们只选取平坡当中的最后一个点,也就是遇到平坡时我们不对pre赋值,pre保持不动我们的cur一直在前进,当cur!这里分开局上下坡的不同情况:一种是开局下坡:pre = 0 && cur < 0,一种是开局上坡:pre = 0 && cur > 0。这道题的思路是:选取局部最优:就是如果加上当前的元素count < 0那么count就从0开始技术,也就是从下一个元素开始再算区间和。大尺寸饼干优先满足胃口大的孩子,而局部最优解就是将大尺寸的饼干分配给胃口大的孩子。(3)求姐妹一个子问题的最优解。

2024-03-25 17:29:41 171

原创 代码随想录算法训练营第29天 | 491.非递减子序列, 46.全排列, 47.全排列II

(2)第二道题的去重思路是:因为数组是有序的,所以我们只需要判断如果遇到了连续好几个一样的元素,我们used是用来区别不同的情况:一种是数枝遍历,可以使用数组内相同的元素,一种是树层遍历,不可以使用相同的元素。(1)第一道题的去重思路是对同一根节点的树层去重,也就是在遇到一个树层时,我们就创建一个新的used数组,如果后面的元素与之前的元素重了我们就直接跳过。因为是无序的所以我们就只能没遇到一个树层就进行创建used数组。但这里并不只是丹丹的去重,和之前组合的去重不一样的是组合去重并不是从0开始遍历的。

2024-03-24 20:16:43 712

原创 代码随想录算法训练营第28天 | 93.复原IP地址 78.子集 90.子集II

这道题就是之前的组合II与子集的结合版,就是需要进行树层去重。这里我们有一点需要注意一下就是在solve函数内,我们的终止条件是start > size,但是我们可以考虑当start>size时下面的单层循环就不执行了,所以可以去点这一判定语句,减少了大量的实行时间。我一开始觉得end<start没有必要加进去,因为i是从start开始遍历直到s.size(),但这里由于插入了'.'的缘故导致我们下一次递归是从i+2开始的所以可能会越过end边界,导致第四个子串为空但依然通过了合法判定。

2024-03-24 16:53:07 238

原创 代码随想录算法训练营第27天 | 39.组合总和 40.组合总和II 131.分割回文子串

这道题的难点在于分割的方法,这道题在看过图解思路后就会清晰该如何去做,我们依照回溯三部曲一一进行:首先是判断传入的参数:这里我们需要做的操作是分割子串所以要对原字符串进行分割,所以我们用到了原字符串s,因为我们只是取出子串并未对原串进行修改所以我们保证传入的是静态的字符串。树层去重,遍历元素直到当前元素与上一个元素不一致的时候便不再跳过,这里我们为什么要跳过而不是标记后再跳过,因为每个节点都有一个回溯的过程标记玩节点后还是需要回溯状态的,所以我们直接跳过可以省去设两个步骤。

2024-03-24 13:46:50 240 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除