自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法训练营Day48

子序列定义为:不改变剩余字符顺序的情况下,删除某些字符或者不删除任何字符形成的一个序列。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。从字符串的最后一个字符开始,逆序遍历到第一个字符。的字符串,我们可以用它的任意一个字符当做中心点,所以中心点的个数是。我们还可以用它任意挨着的两个字符当做中心点,所以中心点是。,找出其中最长的回文子序列,并返回该序列的长度。如果回文串是奇数,我们把回文串中心的那个字符叫做。是字符串中的由连续字符组成的一个序列。,请你统计并返回这个字符串中。

2024-01-24 13:15:49 555

原创 算法训练营Day47

的每个字符,通过比较字符是否相等来决定删除、替换或插入操作。如果不相等,选择删除、替换或插入的最小编辑操作数,分别加上对应的成本。的每个字符,通过比较字符是否相等来决定插入、删除或替换操作。如果不相等,选择插入、删除或替换的最小编辑操作数。因为 对于word1 增加 一个 字母的操作 ,也就是 word2 删除一个 字母的 操作!第一步将 "sea" 变为 "ea" ,第二步将 "eat "变为 "ea"horse -> rorse (将 'h' 替换为 'r')可以删除任意一个字符串中的一个字符。

2024-01-23 12:41:03 731

原创 算法训练营Day46

如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。的前 0 个字符组成的子串都只有一种情况,即空串。这是因为我们在状态转移的过程中,通常是通过考虑第。个字符的情况来更新状态,而不是将第。个字符组成的子串出现的次数得到,即。个字符组成的子串中,字符串。个字符组成的子串出现的次数。#Java #动态规划。个字符组成的子串中,

2024-01-22 15:05:10 588

原创 算法训练营Day45

其思路就是:把数组从头开始遍历叠加,如果加上了当前这个数nums[i], 结果比nums[i]还小,说明之前的sum 和 为负数,因为只有这样才会出现这种状况(当前元素,比前面元素的和加上当前元素还大) ,用max函数得到最后的结果!但无法画出第三条不相交的直线,因为从 nums1[1]=4 到 nums2[2]=4 的直线将与从 nums1[2]=2 到 nums2[1]=2 的直线相交。,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。可以画出两条不交叉的线,如上图所示。

2024-01-21 16:19:18 1042

原创 算法训练营Day44

• 在内层循环中,检查 nums[i] 是否大于之前的元素 nums[j],如果是,说明可以将当前元素加入到以 nums[j] 结尾的递增子序列中。尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。• 使用两层嵌套循环遍历数组,其中外层循环控制当前元素的索引 i,内层循环遍历之前的元素,通过索引 j。是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。最长递增子序列是 [2,3,7,101],因此长度为 4。

2024-01-20 00:40:49 696

原创 算法训练营Day43

你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买股票了。这里的一笔交易指买入持有并卖出股票的整个过程,每笔交易你只需要为支付一次手续费。总利润: ((8 - 1) - 2) + ((9 - 4) - 2) = 8。对应的交易状态为: [买入, 卖出, 冷冻期, 买入, 卖出]你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。在此处买入 prices[4] = 4。代表了交易股票的手续费用。#Java #动态规划。

2024-01-18 13:08:30 959

原创 算法训练营Day42

这里,dp[i-1][j] 表示前一天保持同样状态的最大利润(即没有交易),而 dp[i-1][j-1] + prices[i] 表示前一天处于上一个状态(即上一次的买入状态)并在第 i 天卖出股票。这里,dp[i-1][j] 表示前一天保持同样状态的最大利润(即没有交易),而 dp[i-1][j-1] - prices[i] 表示前一天处于上一个状态(即上一次的卖出状态)并在第 i 天买入股票。• 要么我们在第 i 天再次买入股票,此时利润为 dp[i-1][2] - prices[i]。

2024-01-17 17:35:06 1120

原创 算法训练营Day41

思路与 I 的完全相同,只不过在递推中: dp[i][0]的状态是 前一天持有股票的状态dp[i-1][0] 以及 前一天持有股票,但今天卖了的状态(dp[i-1][1] + prices[i])推出来的。随后,在第 4 天(股票价格 = 3)的时候买入,在第 5 天(股票价格 = 6)的时候卖出, 这笔交易所能获得利润 = 6 - 3 = 3。在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5。同时,你不能在买入前卖出股票。

2024-01-16 13:51:48 1353

原创 算法训练营Day40

• 如果盗贼偷第 i 个房子,则他不能偷第 i-1 个房子,因此当前的最大金额是 dp[i-2] + nums[i](即到第 i-2 个房子时的最大金额加上当前房子的金额)。• 对于每个房子,我们需要选择上述两种情况中金额较大的那一个,即 dp[i] = max(dp[i-1], dp[i-2] + nums[i])。• 如果盗贼不偷第 i 个房子,则当前的最大金额是 dp[i-1](即到第 i-1 个房子时的最大金额,不受当前房子影响)。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。

2024-01-15 13:47:05 1579

原创 算法训练营Day39

• 在每次迭代中,如果 i 大于或等于 j,这意味着可以从 i-j 级台阶跳跃 j 步到达 i 级台阶。• 可以从第0级走2级到达第2级,或者从第1级走1级到达。所以 dp[2] = dp[0] + dp[1] = 1 + 1 = 2。• 可以从第1级走2级到达第3级,或者从第2级走1级到达。所以 dp[3] = dp[1] + dp[2] = 1 + 2 = 3。• 可以从第2级走2级到达第4级,或者从第3级走1级到达。• 可以从第0级走1级到达第1级,所以 dp[1] = dp[0] = 1。

2024-01-14 15:26:55 1352

原创 算法训练营Day38

• 更新dp[j]的值:对于每个j,dp[j]增加dp[j - coins[i]]的值。这表示,如果你已经知道了组成金额j - coins[i]的方法数,那么只需加上当前硬币coins[i],就可以组成金额j。这样,当计算 dp[j] 时,dp[j - coins[i]] 还没有被当前的硬币影响,确保了每种硬币只被使用一次。第i件物品的重量是weight[i],得到的价值是value[i]。之前学习的是01背包,其特点在于:每个物品都只能取一个。请注意,顺序不同的序列被视作不同的组合。

2024-01-12 17:05:24 481

原创 算法训练营Day37

动态规划状态转移:对于每个字符串,更新动态规划表。初始化动态规划数组:创建一个二维数组 dp,其中 dp[i][j] 表示在前 i 个数中选择一些数作为负数,使得这些负数的总和为 j 的方法数。• 使用 nums[i](作为负数):如果 j >= nums[i],方法数增加 dp[i-1][j-nums[i]]。最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。• 对于每个数 nums[i] 和每个可能的和 j,更新 dp[i][j]。

2024-01-11 21:14:20 1167

原创 算法训练营Day36

Java #动态规划小明是一位科学家,他需要参加一场重要的国际科学大会,以展示自己的最新研究成果。他需要带一些研究材料,但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等,它们各自占据不同的空间,并且具有不同的价值。小明的行李空间为 N,问小明应该如何抉择,才能携带最大价值的研究材料,每种研究材料只能选择一次,并且只有选与不选两种选择,不能进行切割。

2024-01-08 17:37:55 502

原创 算法训练营Day35

dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量。所以,到达Finish的路径 就等于,到达Finish上面的路径数加到达Finish左边的路径数。元素1为头结点搜索树的数量 = 右子树有2个元素的搜索树数量 * 左子树有0个元素的搜索树数量。元素2为头结点搜索树的数量 = 右子树有1个元素的搜索树数量 * 左子树有1个元素的搜索树数量。元素3为头结点搜索树的数量 = 右子树有0个元素的搜索树数量 * 左子树有2个元素的搜索树数量。

2024-01-06 15:08:27 2172

原创 算法训练营Day34

#Java #动态规划开源学习资料Feeling and experiences:1. 定义子问题:将原问题分解成较小的子问题。2. 实现递归关系:建立子问题之间的递归关系,这些关系通常以数学形式表达,称为递推公式。3. 存储子问题的解:动态规划通过存储这些子问题的解(通常在一个数组或其他数据结构中)来避免重复计算。4. 构造最终解:从存储的子问题解中构造原问题的解。斐波那契数 (通常用 表示)形成的序列称为 斐波那契数列 。该数列由 和 开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)

2024-01-05 12:23:04 1344

原创 算法训练营Day33

从标记的位置开始,将所有更低位的数字替换为 9。这是因为我们已经减少了前面的一位数字,所以可以安全地将这些位设置为最大可能值(9)以得到最大的单调递增数字。• 记录当前位置 i,这是因为从这一位开始到最低位的所有数字都需要被设置为 9(以保证这部分是最大的单调递增数字)。• 将 digits[i - 1] 减一(因为要保持整体数字的大小尽可能大,但又要小于原来的 N)。首先,将输入的整数 n 转换为字符数组,以便逐位处理。最后,将修改后的字符数组转换回整数,并返回这个整数。的最大数字,且数字呈。

2024-01-04 13:43:18 400

原创 算法训练营Day32

如果当前区间的左边界大于 maxEnd,说明当前区间与之前的区间没有重叠。这时,将之前的区间 [start, maxEnd] 加入到结果列表中,并更新 start 和 maxEnd 为当前区间的值。在这种情况下,更新 maxEnd 为当前区间的右边界和 maxEnd 中的较大值,以扩展当前合并区间的右边界。当两个区间重叠时,保留右边界较小的区间意味着结束时间更早,因此与后续区间重叠的可能性更小。一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。移除 [1,3] 后,剩下的区间没有重叠。

2024-01-03 20:37:01 1172

原创 算法训练营Day31

对于每个账单,如果是5美元,增加5美元纸币的计数;如果是10美元,检查是否有5美元找零,没有则返回`false`;如果是20美元,优先用一张10美元和一张5美元找零,不行则用三张5美元,如果都不可行,返回`false`。把收到的二钱都装在另一个数组ans里,在遍历bills数组时,要找多少钱,就去ans里找,• a[1]和b[1]分别代表这两个人前面应有的比他们身高高或相等的人数。• a和b都是people数组中的元素,每个都是一个包含两个整数的数组。处射出一支箭,若有一个气球的直径的开始和结束坐标为。

2024-01-02 15:56:46 953

原创 算法训练营Day30

Java #回溯。

2024-01-01 21:27:06 1169

原创 算法训练营Day29

• 更新 maxposition 为 maxposition 和 i + nums[i] 中的较大值,这表示从当前位置或之前的位置能跳到的最远距离。如果达到了,需要进行一次新的跳跃,因此 steps 加一,并更新 end 为 maxPosition,即下一次跳跃的目标位置。• 如果 i 大于当前记录的 maxposition,说明无法跳到位置 i,因此返回 false。那么只要第二天的价格大于第一天的,那么就可以第一天买,第二天卖,以此类推下去......数组中的每个元素代表你在该位置可以跳跃的最大长度。

2023-12-31 16:20:22 1064

原创 算法训练营Day28

如果当前最大的饼干ends可以满足当前最大的满足度endg(即s[ends] >= g[endg]),则意味着这个孩子可以被满足。贪心算法是一种在每个步骤中都采取最优解(即,在当前看来最好的解)的算法设计策略。如果当前饼干不能满足当前孩子(即s[ends] < g[endg]),则只将endg指针向前移动一位,检查下一个较小的满足度,因为当前饼干无论如何都无法满足当前孩子。最开始的一个想法是,把nums遍历计算,把得到的差放到另一个数组或者集合中,再用该数组或者集合进行遍历求解。,这个孩子会得到满足。

2023-12-30 13:46:08 1106

原创 算法训练营Day27

• 行程构建:由于DFS是先达到最深层再回溯,所以最终的行程是逆序的,需要反转链表得到正确顺序。• 由于题目中的图可能不是传统意义上的欧拉图(可能不包含所有边),算法的目标是覆盖所有给定的边。• 深度优先搜索(DFS):从”JFK”开始进行DFS,按字典序探索每个机场的所有目的地。• 目标是根据给定的航班列表,找到一条从”JFK”出发,覆盖所有航班至少一次的行程。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。• 涉及到类似于欧拉路径的概念,即通过图中的所有边恰好一次的路径。

2023-12-28 14:27:18 903

原创 算法训练营Day26

• if (i > 0 && nums[i] == nums[i - 1] && used[i - 1] == true):这个条件检查当前元素是否与前一个元素相同,并且前一个元素已经被使用过。这意味着对于每个元素,Set 都是空的,所以每个元素都会被认为是“新”的,从而无法阻止同一层级中的重复选择。这样,当递归到同一层级的不同部分时,Set 中已经包含了该层级中先前考虑过的元素,有效防止重复。数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。这样,相同的元素会相邻,便于去重。

2023-12-27 17:48:10 1115 1

原创 算法训练营Day25

• 如果path中的段数等于4且遍历完了整个字符串s,则将path中的段用点号连接起来,加入到ans列表中。之前做过分割回文字符串,其中的关键点就在于对回文的判断,还有分割线的设定。• 如果path中的段数超过4,说明不是有效的IP地址,直接返回。,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。• 回溯:完成对当前段的探索后,从path中移除最后加入的段。• 从startIndex开始,遍历字符串s的每个字符。,用以表示一个 IP 地址,返回所有可能的。返回的解集中,子集可以按。

2023-12-26 21:30:55 565

原创 算法训练营Day24

• 当 startIndex(当前递归开始的位置)等于字符串的长度时,将当前的 path(代表一个完整的分割方案)复制并添加到 ans 中,然后返回。• 终止条件是在 dfs 函数中设置的,当 startIndex(当前递归的起始索引)等于字符串 s 的长度时,触发终止条件。• 这意味着函数已经考虑了字符串 s 中的所有字符,当前的 path 包含了一种完整的分割方式,其中每个分割都是回文。• 这个检查确保如果在同一层级中前一个相同的元素未被使用过,则当前元素不会被考虑,从而避免了重复的组合。

2023-12-25 19:49:12 1693

原创 算法训练营Day23

每次递归调用 getCombinationSum 时,都会增加 startIndex,这样就不会重复考虑之前的数字,保证了组合的唯一性。• 在递归返回后,需要撤销之前的选择(即从 path 中移除 i 并从 sum 中减去 i),以便于 for 循环中的下一次尝试。• 当构建的字符串长度与输入 digits 的长度相同时,将其视为一个有效组合,并加入到结果集。• 通过回溯(移除已添加的最后一个字符),算法能够撤销之前的选择,从而探索所有不同的组合路径。该列表不能包含相同的组合两次,组合可以以任何顺序返回。

2023-12-23 14:45:25 1345

原创 算法训练营Day22

例如,对于(n, k) = (4, 2),使用startIndex+1可能会产生两次[1, 2]的组合:一次从1开始,一次从2开始。使用i+1是为了在每次递归时,都是基于当前选择的数字进一步选择更大的数字,保证了组合中的数字是按照递增顺序排列的,同时避免了重复的组合。如果使用startIndex+1,每次递归调用时起始索引只会基于原始的startIndex递增,而不是基于当前选择的数字 i。• 通常是达到了问题的解决条件,如路径长度达到某个值,或是已经检查了所有可能的选择。• 当前可以做的选择。

2023-12-22 13:06:17 466

原创 算法训练营Day21

5. 累加和的维护:• 通过在栈中逐个弹出节点并更新它们的值,维护一个累加和。每个节点的新值就是它的原始值加上这个累加和。= null) {该题目,主要就是用到的中序的逆序,读懂题目就简单了!盛气光引炉烟,素草寒生玉佩。Fighting!

2023-12-21 18:41:23 1678

原创 算法训练营Day20

Java #二叉树给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(• 初始化一个指针 node,从根节点 root 开始。• 使用循环,当 p 和 q 都小于 node.val 时,说明它们都在 node 的左子树上,因此将 node 更新为 node.left。

2023-12-20 12:11:59 1045 1

原创 算法训练营Day19

中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(之前递归搜索树写多了,导致首先想到的方法 是把每个节点与左右子树值的差返回给上一级作比较。记录上一个节点的值,与当前值进行相减之后,与minNode中存储的结果作比较(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。给你一个含重复值的二叉搜索树(BST)的根节点。),这样可以更新其结果,遍历完得到最终的结果。minNode中肯定存放的是更小的值。

2023-12-19 22:03:54 497

原创 算法训练营Day18

例如,当递归检查左子树时,会将当前节点的值作为新的上界传递给左子树的递归调用,因为左子树中的所有节点都应该小于这个上界(即当前节点的值)。使用 `Long.MIN_VALUE` 和 `Long.MAX_VALUE` 作为初始的下界(lower)和上界(upper)是为了确保在初始调用时,所有可能的 `int` 值都在这个范围内。类似地,对于右子节点,其值必须大于其父节点的值,并且小于或等于其所有祖先节点中右侧的最大值(这就是为什么我们用 `Long.MAX_VALUE` 作为初始的上界)。

2023-12-18 19:44:23 1765 1

原创 算法训练营Day17

思路:从后序遍历结果来看,最后一个即为根节点root,找到根节点在中序遍历结果中的位置,就能直到它的左右节点有哪些。思路:利用深度优先搜索,定义全局变量,把得到的结果赋值给全局变量,走不通了,那最后赋值给全局变量的则是最后的结果;通过递归深度比较,会把最深的左子节点的值赋值给全局变量的最大左值。在这里,我设置了两个全局变量,一个最大深度,一个最大左值。的路径,这条路径上所有节点值相加等于目标和。是同一棵树的后序遍历,请你构造并返回这颗。提到了层数,显然是要去找最大深度的。是二叉树的中序遍历,

2023-12-16 13:50:00 583 1

原创 算法训练营Day16

Java #二叉树给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。题目要求的是每个节点,这样就想到了把问题分为多个子问题,利用递归来解。注意:• 高度通常是指从一个节点到其最远叶子节点的最长路径上的边数。• 在一个树结构中,树的高度通常是指根节点的高度,即从根节点到最远叶子节点的最长路径。• 例如,在一棵二叉树中,根节点的高度是从根节点到最远叶子节点的边的数量。

2023-12-15 11:44:53 1095

原创 算法训练营Day15

当前节点的一个孩子为空时,说明要么是左孩子为空,要么是右孩子为空,反正minLeft与minRight中有一个为0,则返回 minLeft+minRight+1;调用的方法最后返回的是当前节点最小的深度,+1是把当前节点自身算上去一起返回给上一层。首先考虑递归的时候,不要纠结递归过程中,它是如何一步一步走的,不然这样很容易绕晕。今天最主要的就是深入理解递归,能快速写出简单题的递归解法。这道题官方用的是二分查找加位运算,降低了空间的开销。昨天对此题也做了练习与解答,用到的是层序遍历的解法。

2023-12-14 11:07:18 805 1

原创 算法训练营Day14

Java #二叉树层次遍历 #反转二叉树二叉树的层次遍历很好理解:就是从根结点一层一层地往下遍历(同一层,从左到右):迭代的方式很好理解:就是依次入队出队。但是判断条件怎么写?最需要解决的就是,要把节点依次入队,那要怎么记录这些节点,防止它们丢失。第一步把根节点先入队,这时候要想让它的左孩子和右孩子入队(如上图),就要在A出队的时候,记录它。关键的就是在一个节点出队的时候,记录该节点,就能找到它的左右孩子。用两个while循环,主要是为了满足结果形式,保证每个结果都保存在一个新的集合中。

2023-12-13 17:11:22 1368 1

原创 算法训练营Day13

二叉树 #数据结构 #Java二叉树理论基础篇这里总结一下二叉树的基础概论:二叉树是一种树状数据结构,每个节点最多有两个子节点,分别为左子节点和右子节点。它具有以下特性:1. 根节点:树的顶部节点,没有父节点。2. 子节点:每个节点最多有两个子节点。3. 叶节点:没有子节点的节点称为叶节点。4. 深度:根节点到任意节点的唯一路径长度称为深度。5. 高度:从叶节点到根节点的路径长度称为高度。6. 层次:树中具有相同深度的节点形成一个层次。

2023-12-12 21:37:50 409

原创 算法训练营Day12

给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。目前为止出现的第一道Hard。最开始想到的就是暴力解法,而且很容易能写出来作为Hard题,肯定不会这么容易就能通过。视频中的思路使用的单调栈。单调栈的特点是栈内的元素保持调性,可以是单调递增或者单调递减。严格来说的话应该用的是单调双端队列。

2023-12-11 22:03:11 944 1

原创 算法训练营Day11

Java #栈和队列对于这个处理字符,括号匹配的问题,在学习数据结构中也遇到过。数据结构中的做法就是模拟栈,利用栈先进后出的特点。此代码的注释看到很乱,因为我在第一遍写的时候,有很多问题和细节都没有考虑到。我最开始只判断了左右括号是否匹配的问题,而没有考虑它们数目是否相等。,把对应的右括号入栈,然后去判断这个右括号,如果它与当前的左括号匹配,则出栈。依次这样操作,如果栈为空,说明匹配成功,如果不为空则失败。大体思路没问题,但里面还有很多细节没有处理。比如还存在右括号多了的情况。

2023-12-09 17:00:43 1144

原创 算法训练营Day10

Queue与Stack接口在Java中都扩展了Collection接口,继承了一些通用的集合方法,比如size(),isEmpty(),contains()等。1. 函数调用: 栈常常用于实现函数调用的调用栈,其中每次函数调用都将其局部变量和返回地址压入栈中,函数返回时再弹出。2. 表达式求值: 栈可以用于计算表达式的值,特别是中缀表达式到后缀表达式的转换,以及后缀表达式的求值。offer(E,e):将元素插入队列,成功返回true,失败返回false。这两个接口定义了操作队列和栈的标准方法。

2023-12-08 20:08:48 1095

原创 算法训练营Day9

题意:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?用到的两个指针,我感觉像是在你追我赶,一个指针记录记录先走的那个指针的出发位置,等那个指针停下了,记录了结果就直接瞬移过去。所以,当我们遍历完,慢指针指向的元素一定不等于val,返回慢指针,就相当于返回了移除元素后的数组长度。在C/C++中,运用双指针,可以在字符串后开辟空间,然后从后向前替换数字字符。

2023-12-07 20:35:07 1069 1

空空如也

空空如也

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

TA关注的人

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