自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 (19)LeetCode 54. 螺旋矩阵

使用方向数组 + 访问标记模拟螺旋行走,逻辑直观,不易出错。每次尝试前进,遇到障碍就右转,保证了螺旋顺序。该解法适用于任意m × n矩阵(包括非方阵)。

2026-07-27 20:32:53 168

原创 (18)LeetCode 73. 矩阵置零

本题的关键在于用矩阵自身的第一行和第一列作为标记数组,从而避免开辟额外空间。注意要提前记录第一行和第一列是否原本有 0,否则标记过程会覆盖掉这些原始信息,导致无法正确处理第一行和第一列本身。这种“原地标记”的技巧在矩阵类问题中经常出现,值得熟练掌握。扩展思考:如果要求不能修改第一行和第一列本身,则必须使用O(m+n)的额外标记数组,但本题允许,所以上述解法是最优的。

2026-07-27 19:55:05 182

原创 (17)LeetCode 41. 缺失的第一个正数

给你一个未排序的整数数组nums,请你找出其中没有出现的最小的正整数。请你实现时间复杂度为并且只使用额外空间的解决方案。

2026-07-16 19:49:28 237

原创 (16)LeetCode 238:除自身以外数组的乘积

给你一个整数数组nums,返回数组answer,其中answer[i]等于nums中除nums[i]之外其余各元素的乘积。:不使用除法,且在 O(n) 时间复杂度内完成。

2026-07-16 19:21:31 290

原创 (15)LeetCode 189. 轮转数组

三次反转法是一种巧妙的原地算法,利用反转的逆序特性实现区间交换。注意取模操作避免冗余轮转,并确保反转区间合法。

2026-07-14 18:57:24 229

原创 (14)LeetCode 56. 合并区间

以数组intervals表示若干个区间的集合,其中单个区间为。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。

2026-07-10 19:29:11 208

原创 (13)LeetCode 53. 最大子数组和

Kadane代码简短、效率极高。分治思想经典,体现了“分而治之”及区间合并的通用技巧。注意处理全负数边界情况,确保子数组非空。

2026-07-09 21:06:06 190

原创 (12)LeetCode 76. 最小覆盖子串

滑动窗口是解决子串/子数组问题的重要技巧,常用于求满足条件的最短/最长区间。本题的核心难点在于如何高效判断窗口是否覆盖t,以及如何处理重复字符。使用双哈希表 + 计数器是解决此类问题的经典范式,掌握后可轻松应对 LeetCode 438、567 等相似题目。

2026-07-08 20:23:54 362

原创 【算法笔记】数学知识

数学知识 质数与约数部分

2026-06-07 21:16:21 205

原创 【算法笔记】最短路径算法

最短路径算法from AcWing

2026-05-24 21:04:06 788

原创 LeetCode 2087. 网格中的机器人回家最小代价

本题关键在于发现代价与具体路径无关,只需计算行区间和列区间的累加和并减去起点代价即可。贪心思想 + 前缀和(或直接累加)就能得到最优解。

2026-04-04 21:29:27 241

原创 LeetCode 3418.机器人可以获得的最大金币数

定义递归函数表示:从起点(0, 0)走到(i, j),且剩余k次豁免机会(即还能将k个负数单元格变成 0)时,所能获得的最大路径和。0 <= i < m0 <= j < n(因为最多感化 2 个强盗)最终答案就是。本题是经典路径 DP 的拓展,关键在于发现“豁免次数”可以作为状态的一维,然后用记忆化搜索清晰地表达出“选择豁免”与“不豁免”两种转移。这种状态扩展的思路在许多带有“操作次数限制”的网格问题中非常常见(如最多修改k次、最多使用k次魔法等)

2026-04-02 21:23:57 389

原创 LeetCode 735 & 2751.栈模拟碰撞问题详解

对比项LeetCode 735 小行星碰撞LeetCode 2751 机器人碰撞方向表示正数(右)/ 负数(左)'R''L'碰撞条件右→左相向右→左相向处理顺序直接遍历数组(隐含位置顺序)需要按位置排序后再处理碰撞规则比较绝对值大小,大的存活,相等同归于尽比较健康值,大的存活且健康减1,相等同归于尽栈中元素未碰撞的行星(正负均可)仅存方向为'R'的机器人状态变化死亡即消失存活后健康值减少,可能继续碰撞栈模拟碰撞问题是算法题中的经典题型,掌握后可以轻松应对许多变种。

2026-04-01 20:49:37 465

原创 LeetCode 3474. 字典序最小的生成字符串

本题通过先满足所有强制相等条件,再破坏所有强制不等条件的策略,利用贪心方法逐个解决冲突。将'T'要求的子串直接填充,同时检测冲突。对'F'条件,仅当当前子串意外相等时才进行破坏,且破坏时优先选择原本可修改的位置。从后向前修改可以减少对其他条件的干扰。这种方法简单直观,且能有效判断无解情况。

2026-03-31 21:41:32 278

原创 (11)LeetCode 239. 滑动窗口最大值

队列中存储的是下标,而不是元素值,方便判断元素是否滑出窗口。双端队列从队尾维护单调性(淘汰较小值),从队首淘汰过期值。每个窗口的最大值就是队首元素对应的值,获取时间为 O(1)。

2026-03-29 21:11:24 302

原创 LeetCode 2839. 判断通过操作能否让字符串相等 I

本题的关键在于将交换限制转化为奇偶位置的独立性,从而用简单的计数比较代替复杂的搜索。这种“奇偶位分离”的思想在字符串处理问题中非常实用。

2026-03-29 20:46:46 220

原创 LeetCode 2573. 找出对应 LCP 矩阵的字符串

给你一个n x n的矩阵lcp,其中lcp[i][j]表示字符串s从下标i开始和从下标j开始的最长公共前缀(LCP)的长度。你需要还原出由小写字母组成的字符串s,如果不存在这样的字符串则返回空串。

2026-03-28 20:11:13 190

原创 LeetCode 3546. 等和矩阵分割

给定一个m x n的整数网格grid,判断是否存在一条或,将网格分割成两个非空部分,使得两部分内的所有数字之和相等。:切割线必须位于两行或两列之间,且两部分不能为空。

2026-03-25 09:33:27 288

原创 LeetCode 238 & 2906.构造乘积数组与乘积矩阵

结果 = 左边/上边所有元素的乘积 × 右边/下边所有元素的乘积通过两次遍历分别计算出这两部分,并相乘得到最终答案。通过对比一维和二维的“除自身外乘积”问题,我们看到了同一思想在不同数据结构上的迁移能力。核心技巧:前缀积 + 后缀积优势:无需除法,时间空间复杂度优秀,易于扩展适用场景:任何需要计算“除自身外其他元素积”的场景,都可以考虑本方法。

2026-03-24 21:10:42 495

原创 LeetCode 1594.矩阵中最大的非负乘积

我们采用滚动数组f_min[j]:表示从起点到达当前行第j列的所有路径中,乘积的最小值。f_max[j]:表示从起点到达当前行第j列的所有路径中,乘积的最大值。遍历每个格子(i, j),对于当前位置的值x,其可能的前驱位置只有上方(i-1, j)和左方(i, j-1)。我们利用这两个位置已经计算好的min和max,来更新当前格子的min和max。负数乘法:必须同时维护最小值和最大值,因为最小值(负数)乘负数可能变为最大值。滚动数组:只用一维数组记录当前行的结果,避免二维数组占用过多空间。

2026-03-23 19:43:25 309

原创 LeetCode 48 & 1886.矩阵旋转与判断

题目核心技巧关键点48. 旋转图像转置 + 行反转原地操作,数学变换1886. 判断矩阵轮转复用旋转函数循环 4 次,先检查后旋转。

2026-03-22 21:38:23 286

原创 LeetCode 3643.子矩阵垂直翻转算法解析

本题通过简单的双指针方法实现了子矩阵的垂直翻转操作,代码简洁高效。理解这个算法有助于掌握二维数组的区间操作技巧。

2026-03-21 19:55:14 247

原创 LeetCode 3567.子矩阵的最小绝对差

解法时间复杂度空间复杂度优点缺点暴力枚举O(k²)实现简单效率低滑动窗口O(mn + k²)效率高,通用性强实现较复杂桶排序O(V)数值范围小时极快受数值范围限制。

2026-03-20 21:12:49 317

原创 LeetCode 3212. 统计X和Y出现次数相等的子矩阵数量

本题利用二维前缀和快速获取子矩阵中字符的频次,并通过巧妙的位运算区分'X'和'Y',代码简洁高效。注意题目要求子矩阵必须从(0,0)开始,因此只需枚举右下角即可。

2026-03-19 21:27:46 254

原创 (10)LeetCode 560. 和为K的子数组

本题是前缀和与哈希表结合的经典题目。核心思想是将子数组和问题转化为两个前缀和的差值问题,利用哈希表快速查找之前出现过的前缀和,从而在一次遍历中完成统计。初始化是处理从数组开头开始的子数组的关键。

2026-03-18 20:35:32 219

原创 LeetCode 3070. 元素和小于等于 k 的子矩阵数目

本题的核心是二维前缀和的应用。由于子矩阵的左上角固定为原点,前缀和数组可以直接对应每个可能子矩阵的和,从而将统计过程简化为一次遍历。掌握二维前缀和可以高效解决类似矩阵区域和的问题。

2026-03-18 20:00:52 291

原创 LeetCode 1727.重新排列后的最大子矩阵

本题的关键在于理解“重排列”带来的便利:我们只需关注每一列的高度,而无需关心它们的原始顺序。通过累积高度并对每行排序,可以轻松求出以当前行为底边的最大可能矩形面积。这种思想在涉及列重排的矩阵问题中非常有用,值得掌握。

2026-03-17 22:19:53 396

原创 LeetCode 84 & 85.柱状图最大矩形与最大矩形

题目核心思想关键点84单调栈求每个柱子左右第一个更矮的位置一维问题,不可重排85将二维矩阵逐行转化为一维柱状图,每行调用 84 题二维问题,利用高度累积,不可重排联系:85 题的核心技巧是高度累积,把二维问题降为一维,然后复用 84 题的高效解法。这种思路在矩阵类问题中非常常见(如统计全 1 正方形等)。区别:84 题是基础算法题,85 题是它的应用扩展。掌握 84 题的单调栈解法,是理解 85 题的前提。

2026-03-17 22:15:09 395

原创 (9)LeetCode 438.找到字符串中所有字母异位词

该解法利用滑动窗口与计数匹配的思想,避免了每次重新统计窗口字符频次,而是通过维护一个“需求差值”和“平衡种类数”来实时判断窗口是否满足要求,是一种非常优雅且高效的算法。理解tar和cnt的变化是掌握此题的关键。

2026-03-16 21:31:09 441

原创 (8)LeetCode 3. 无重复字符的最长子串

本题使用滑动窗口 + 哈希表完美解决了“子串无重复”的约束。关键在于利用哈希表快速判断重复,并通过移动左边界动态调整窗口。这种思想也适用于其他“连续子区间”问题,如“最多包含 k 个不同字符的最长子串”等,只需稍作修改即可。

2026-03-16 21:02:25 389

原创 LeetCode 1878. 矩阵中最大的三个菱形和

本题的核心技巧是对角线方向的前缀和,它将菱形边界和的计算从 O(边长) 降到了 O(1),使得我们可以暴力枚举所有可能的菱形。在实现时注意边界的处理和线段划分的准确性,即可正确求解。

2026-03-16 20:35:37 388

原创 (7)LeetCode.42 接雨水

接雨水问题是一道经典的面试题,三种解法分别代表了动态规划、双指针、单调栈三种不同的思想。掌握它们不仅能解决本题,还能帮助你处理其他类似问题(如柱状图中最大的矩形、每日温度等)。

2026-03-15 22:10:22 429

原创 LeetCode 50. Pow(x, n)

快速幂是处理幂运算的高效算法,其核心在于将指数二进制分解,通过位运算和平方累乘实现 O(log n) 的时间复杂度。本题是快速幂的经典应用,掌握后可用于解决许多类似问题(如矩阵快速幂、斐波那契数列等)。

2026-03-15 21:35:53 336

原创 LeetCode 1622. 奇妙序列

本题巧妙地将对序列的整体操作转化为两个全局参数的维护,并利用模逆元在添加元素时存储“逆像”,从而避免了每次操作都修改全体元素。这种延迟更新思想在区间操作类问题中非常常见,值得掌握。

2026-03-15 20:49:11 392

原创 LeetCode 1415. 长度为 n 的开心字符串中字典序第 k 小的字符串

这种方法利用数学计数和位运算,直接从 k 解码出字符串的每一位,避免生成所有字符串。关键在于理解 k 的二进制位如何映射到分支选择,以及巧妙的「≥ 前一个字符则加 1」调整规则,使得相邻字符不相同。代码简洁高效,是这道题的最优解之一。

2026-03-14 21:02:02 361

原创 LeetCode 3296. 使山区高度为零的最少秒数

本题的关键在于将问题转化为二分答案,并利用二次方程求根快速计算每个工人在给定时间内的最大工作量。这种方法避免了直接模拟的复杂性,同时利用了数学推导,使算法高效且易于实现。理解该题后,可以进一步思考如果工人降低单位时间不是等差数列而是其他规律(如指数增长),应如何调整判定函数。二分答案的思路依然通用,只需改变内部的计算公式即可。

2026-03-13 11:14:10 420

原创 LeetCode 3600. 升级后最大生成树稳定性

本题的关键在于将问题转化为二分答案判定,并巧妙地设计 check 函数。利用并查集动态维护连通性,并记录连通块数量,方便快速判断是否连通。两轮边处理:先强制加入所有合格边,再用有限数量的特殊低权边补全。提前排除必选边环和图不连通的情况,避免无解。

2026-03-12 10:54:59 353

原创 LeetCode 1009 & 476.数字的补数

两道题本质相同,解法各有特色。解法一(逐位取反)思路直观,适合初学者理解二进制位操作。解法二(掩码取反)代码更简洁,利用掩码一次完成截断,体现了位运算的灵活性,但在使用时需留意数据范围。掌握这两种解法有助于加深对位运算和二进制表示的理解,在实际开发中可根据场景选择合适的方法。

2026-03-11 20:30:10 244

原创 LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置

本题是二分查找的经典变体应用。通过实现一个能够查找第一个大于等于目标值的函数,我们可以轻松定位目标值的左右边界。这种方法思路清晰,代码简洁,是解决此类问题的首选方案。

2026-03-10 21:10:52 248

原创 LeetCode 3130.找出所有稳定的二进制数组 II

设f[i][j][k]表示已经使用了i个 0 和j个 1,且数组最后一个数字是kk = 0表示末尾为 0,k = 1表示末尾为 1)的稳定数组个数。本题的核心是状态定义与滑动窗口优化。通过维护两个滑动窗口,我们将原本需要枚举长度的过程转化为 O(1) 查询,从而高效地解决了大规模数据下的计数问题。这种技巧在类似的 DP 问题中非常常见,值得熟练掌握。

2026-03-10 10:37:44 379

空空如也

空空如也

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

TA关注的人

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