- 博客(37)
- 收藏
- 关注
原创 每日算法练习:LeetCode 54. 螺旋矩阵 ✅
忘记判断边界:遍历右列、底行、左列前,必须加if判断,否则会出现元素重复或数组越界错误。方向顺序错误:必须严格遵循左→右 → 上→下 → 右→左 → 下→上的顺序。边界更新时机:先遍历,后更新边界(top++等操作必须在遍历完那一圈之后做)。矩阵形状处理1xN(一行)或Nx1(一列)的矩阵时,代码能自动处理,因为边界判断会触发break。这道题的核心是 **「边界收缩」**。走一圈,四个方向各走一遍,然后把包围圈往里缩一点,继续走。这道题的代码模板非常通用,面试中如果遇到螺旋矩阵 II。
2026-04-14 22:15:13
378
原创 每日算法练习:LeetCode 36. 有效的数独 ✅
宫格编号计算错误,不要写成i/3 + j/3数组维度搞反是行号在前,数字在后忘记跳过空白格:直接对做字符转数字会出错数字范围:数字是 1-9,数组第二维开 10,索引 0 不用这道题是数组模拟的经典入门题,核心是对三个维度的重复校验,代码逻辑清晰,边界处理简单,是面试中考察细心程度的高频题。一次遍历的写法效率最高,空间复杂度 O (1),是最优解法也可以用哈希表 / Set 实现,但数组标记法更高效、更简洁核心考点:对规则的理解、数组的应用、宫格编号的计算。
2026-04-13 16:23:09
343
原创 每日算法练习:LeetCode 76. 最小覆盖子串 ✅
边界处理t长度大于s时,直接返回空字符串。match统计错误:必须保证字符次数刚好等于目标次数时才match++,移除时次数等于目标次数时才match--。窗口长度计算(因为right已经右移一位,无需+1数组初始化need和window数组初始化为 0,无需手动填充。最终返回:必须判断minLen是否更新,未更新则返回空字符串。这道题是滑动窗口的经典模板题,核心思想是「右指针扩张找合法窗口,左指针收缩找最小窗口」,用match。
2026-04-12 22:01:12
364
原创 每日算法练习:LeetCode 30. 串联所有单词的子串 ✅
忘记按 wordLen 分组遍历→ 超时 / 漏解matchCount 统计错误→ 最容易错收缩左指针时没有更新 matchCount→ 答案错误遇到无效单词没有重置窗口→ 计数混乱找到答案后没有滑动左指针→ 重复记录答案这道题是滑动窗口的最高难度应用之一,也是面试高频困难题。固定单词长度→ 分组遍历次数匹配→ 双哈希表快速判断是否合法→ matchCount 统计种类数窗口超标→ 收缩左指针今天的每日算法练习就到这里,我们明天再见!👋。
2026-04-11 14:38:13
410
原创 每日算法练习:LeetCode 3. 无重复字符的最长子串 ✅
核心考点:本题是滑动窗口的经典应用,考察对 “双指针动态调整” 和 “重复字符快速定位” 的理解。优化技巧:使用int[128]数组代替HashMap,是处理 ASCII 字符集问题的标准技巧,能显著提升运行效率。易错点left 的更新必须用Math.max:这是最容易出错的地方,必须保证左指针只向右移动,不向左回退。窗口长度计算,不要忘记加 1。初始值设定:数组初始化为 -1 而非 0,因为索引 0 也是有效位置。今天的每日算法练习就到这里,我们明天再见!👋。
2026-04-10 11:01:54
473
原创 每日算法练习:LeetCode 209. 长度最小的子数组 ✅
核心考点:本题的核心是 ** 滑动窗口(双指针)** 的应用,利用数组元素全为正的特性,将暴力枚举的O(n²)复杂度优化到O(n),是面试中考察数组优化的经典题目。关键逻辑:滑动窗口的核心是「右指针扩张,左指针收缩」,只有当窗口和满足条件时才收缩左指针,保证每个元素最多被访问两次,时间复杂度线性。进阶拓展:前缀和 + 二分查找是通用解法,不依赖元素全为正,适合处理更复杂的子数组和问题,是面试中拓展思路的好方向。易错点初始minLen设为,避免遗漏边界情况;窗口长度计算为,不要漏加1;
2026-04-09 12:34:39
402
原创 每日算法练习:LeetCode 15. 三数之和 ✅
核心考点:本题是排序 + 双指针的经典组合,是面试中 O(n2) 复杂度算法的典型代表。去重是关键:这道题 90% 的错误都出在去重逻辑上。必须牢记对ileftright三处的重复元素都要进行跳过。剪枝优化:固定数大于 0 时直接返回,是非常实用的优化,能减少不必要的计算。与两数之和的区别两数之和:用哈希表或双指针。三数之和:必须排序 + 双指针,且重点在去重。今天的每日算法练习就到这里,我们明天再见!👋。
2026-04-08 22:47:08
358
原创 每日算法练习:LeetCode 11. 盛最多水的容器 ✅
核心考点:本题的核心是贪心思想 + 双指针优化,通过合理的指针移动策略,将暴力枚举的 O (n²) 复杂度优化到 O (n),是面试中考察算法优化能力的经典题目。关键逻辑:必须移动较短的那根指针,这是保证算法正确性的核心,也是面试中面试官一定会追问的点。易错点面积计算时,高度取两个指针的最小值,而非最大值;指针移动时,仅移动短指针,长指针保持不动;初始最大面积设为 0,避免遗漏边界情况(如全 0 数组)。拓展对比。
2026-04-07 13:38:29
367
原创 每日算法练习:LeetCode 167. 两数之和 II - 输入有序数组 ✅
核心考点:本题的核心是利用数组有序的特性,用双指针将时间复杂度从哈希表的 O (n)(空间 O (n))优化为 O (n)(空间 O (1)),完美满足题目常量空间的要求。面试优先级:双指针法是本题的最优解,面试中必须优先写出,代码简洁、逻辑清晰,几乎零出错。拓展对比:和「两数之和」(无序数组)的区别:无序数组:只能用哈希表(时间 O (n),空间 O (n));有序数组:双指针法(时间 O (n),空间 O (1)),是更优的解法。易错点。
2026-04-03 21:32:39
363
原创 每日算法练习:LeetCode 392. 判断子序列 ✅
顺序不变s中字符的相对顺序必须和t中完全一致;不要求连续s的字符可以在t中不连续出现,只要顺序对即可。基础解法:双指针法是最直观、最容易写对的解法,面试中优先写这个版本,代码简洁、逻辑清晰,几乎不会出错。进阶优化:当遇到海量查询场景时,必须用「预处理 + 二分查找」的方案,核心是把t的位置信息提前存好,用空间换时间,大幅提升查询效率。核心考点:这道题不仅考察双指针的基础应用,更重要的是考察对时间复杂度的优化意识,以及对海量数据场景下算法选型的理解,是面试中非常好的拓展题。
2026-04-02 20:21:36
405
原创 每日算法练习:LeetCode 125. 验证回文串 ✅
回文串的核心定义:正读和反读完全相同的字符串。本题有两个关键限制:只考虑字母和数字字符,忽略标点、空格等其他字符;忽略字母的大小写(例如 'A' 和 'a' 视为相同字符)。解题的核心思路的是:先对字符串进行预处理,过滤无效字符并统一大小写,再验证处理后的字符串是否为回文。验证回文串的核心:先过滤无效字符、统一大小写,再通过双指针验证对称性。面试中,若不要求空间优化,优先写「预处理 + 双指针」解法,代码简洁、不易出错,能快速完成答题。
2026-04-01 16:24:57
389
原创 LeetCode 68. 文本左右对齐 题解 ✅
单词间仅补1 个空格最后用空格填充至maxWidth,保证长度合规核心思想:贪心选单词 + 分场景处理空格,是字符串模拟题的通用思路关键细节:最后一行左对齐、空格不均分时左侧优先、单行单单词处理面试技巧:先理清三种场景的逻辑,再写代码,避免边界条件遗漏这道题是字符串模拟的标杆题,吃透它能大幅提升你处理复杂字符串问题的能力。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-31 19:55:10
375
原创 每日算法练习:LeetCode 28. 找出字符串中第一个匹配项的下标 ✅
基础版:暴力匹配适合理解,代码简单,适合数据量小的场景。进阶版:KMP 算法是字符串匹配的经典算法,核心是利用 LPS 数组避免重复比较,时间复杂度更优。简洁版:直接调用indexOf(),在面试中是最快的写法,且底层已做优化。这道题是字符串处理的入门题,掌握暴力匹配和 KMP 算法,能为后续学习更复杂的字符串算法打下基础。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-30 17:48:57
211
原创 每日算法练习:LeetCode 6. Z 字形变换 ✅
核心技巧:找到 Z 字形排列的周期规律,快速计算每个字符所在的行号。边界处理时直接返回原串,避免周期计算错误。代码简洁:用数组存储每行的,高效拼接结果。这道题是 “找规律” 类算法题的典型代表,理解周期规律后,代码实现非常简洁。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-29 17:53:02
252
原创 每日算法练习:LeetCode 151. 反转字符串中的单词 ✅
核心技巧:利用自动处理多余空格,再逆序拼接,代码简洁高效。进阶思路:原地反转整个字符串后再逐个反转单词,实现 O (1) 额外空间,适合面试时展示更优的算法思维。边界处理:自动处理前导、尾随、单词间多余空格,保证结果字符串格式正确。这道题是字符串处理的经典题,掌握这两种思路,就能轻松解决这类单词反转和空格清理的问题。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-28 21:41:58
205
原创 每日算法练习:LeetCode 14. 最长公共前缀 ✅
核心思想:通过 “逐步缩短” 或 “逐位比对” 的方式,找到所有字符串共享的最长前缀。边界处理:注意数组为空、字符串为空、无公共前缀等情况。代码简洁:两种方法代码都很简洁,面试中推荐纵向扫描法,逻辑更直观。这道题是字符串处理的入门题,掌握这两种思路,就能轻松解决这类公共前缀问题。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-27 10:21:06
204
原创 每日算法练习:LeetCode 58. 最后一个单词的长度 ✅
核心技巧:从后往前遍历,先跳过末尾空格,再统计单词长度,避免处理前面无关的内容。边界处理:注意字符串末尾可能有多个空格,必须先跳过才能找到最后一个单词。代码简洁:逻辑清晰,代码量少,是面试中快速写出的理想模板。这道题是字符串处理的入门题,掌握这种 “逆向遍历” 的思路,能解决很多类似的字符串边界问题。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-27 10:06:41
69
原创 每日算法练习:LeetCode 12. 整数转罗马数字 ✅
核心思想:贪心 —— 永远用当前最大的面值去凑,保证罗马数字的最短表示。代码简洁:把特殊减法形式直接当作普通面值处理,避免复杂判断。对比记忆罗马转整数:看 “左小右大就减”整数转罗马:从大到小贪心匹配这道题和上一道(罗马转整数)是完美的双向练习,一起掌握就能彻底搞定罗马数字的转换问题。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-26 12:28:55
179
原创 每日算法练习:LeetCode 13. 罗马数字转整数 ✅
核心技巧:利用 “小数在大数左边则减法” 的规则,一次遍历完成转换。代码简洁:通过哈希表快速查找字符对应数值,逻辑清晰易读。边界处理:最后一个字符单独处理,避免数组越界。这道题是字符串处理和规则判断的经典入门题,非常适合练习基础算法思维。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-25 17:41:48
207
原创 每日算法练习:LeetCode 42. 接雨水 ✅
核心公式:每个位置接水量 = min (左最高,右最高) - 当前高度双指针法:用一次遍历同时处理左右两边,把空间复杂度优化到 O (1),是面试最优解本质:通过 “哪边矮就先处理哪边” 的贪心策略,保证每个位置的水位由较低的一侧决定这道题是数组和双指针的经典应用,理解后能举一反三解决很多 “区间极值” 类问题。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-24 08:00:00
374
原创 每日算法练习:LeetCode 135. 分发糖果 ✅
核心思想:通过两次遍历分别处理左右约束,最后取最大值,保证同时满足所有条件。贪心本质:每次只关注当前方向的最优解,最终合并得到全局最优解。易错点:第二次遍历时必须取max,否则会破坏第一次遍历已经满足的约束。这道题是贪心算法中 “多方向约束” 的经典应用,理解两次遍历的逻辑,就能轻松解决这类问题。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-23 12:03:01
239
原创 每日算法练习:LeetCode 134. 加油站 ✅
快速判断:先算总油量和总消耗,不足直接返回-1。贪心选择:一次遍历,遇到油箱不足就更新起点,保证最终找到唯一可行解。核心逻辑:如果一段路走不通,这段路的所有点都不能作为起点,下一个可能的起点只能是这段路的下一个点。这道题是贪心算法中 “跳过无效区间” 的经典应用,代码简洁高效,是面试必背模板。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-22 09:56:14
239
原创 每日算法练习:LeetCode 238. 除了自身以外数组的乘积 ✅
核心思想:将每个位置的结果拆分为「左边乘积 × 右边乘积」,避免使用除法。空间优化:先存前缀乘积,再用一个变量维护后缀乘积,直接乘到结果数组上,实现 O (1) 额外空间。易错点:注意前缀和后缀的边界处理(第一个元素前缀为 1,最后一个元素后缀为 1)。这道题是面试中非常经典的数组遍历题,掌握这种「前缀 + 后缀」的思路,能解决很多类似的乘积 / 和的问题。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-21 14:28:18
202
原创 每日算法练习:LeetCode 380. O (1) 时间插入、删除和获取随机元素 ✅
这道题的核心是组合数据结构用动态数组解决「随机访问」问题。用哈希表解决「快速查找」问题。用「交换最后元素」的技巧,将数组中间删除操作优化为 O (1)。这种思想在很多「需要同时满足多种高效操作」的题目中都有应用,是面试中的高频考点。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-20 10:27:04
372
原创 每日算法练习:LeetCode 274. H 指数 ✅
至少有h篇论文,每篇被引用次数 ≥h是满足条件的最大值h 指数的核心:找到最大的h,使得至少h篇论文被引 ≥h次。排序法是最直观的解法,面试中优先选择,代码易写且不易出错。计数排序法利用了题目中引用次数的范围限制,实现了 O (n) 的最优时间复杂度。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-19 22:37:52
392
原创 每日算法练习:LeetCode 45. 跳跃游戏 II ✅
表格题目编号题目名称核心考点变量维护跳跃游戏 I判断可行性维护maxReach,看能否覆盖终点跳跃游戏 II求最少步数维护maxReachendsteps,分段统计LeetCode 45 的精髓:在贪心策略中,“分段更新边界”是一种极其高效的统计方式。它把跳跃过程拆分成了一个个阶段,每个阶段只在必须扩展边界时才统计步数,这是面试中非常加分的 “手写代码” 模板。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-18 10:16:23
344
原创 深度解析贪心算法
在对问题求解时,每一步都采取在当前状态下最好或最优(最有利)的选择,从而希望导致结果是全局最优的策略。贪心的特点:局部最优:每一步都选最好的,不顾全大局。不可回溯:一旦做出了选择,就像过河卒子,绝不回头重新决策。简单高效:因为它不需要计算所有可能性,执行速度通常非常快。在某些特定的规则下,过好当下每一刻,就是对人生最好的规划。虽然它不能解决所有问题(有些问题需要动态规划的深谋远虑,或回溯算法的推倒重来),但在满足“贪心选择”的场景下,它不仅运行快,而且代码逻辑极简。学习建议。
2026-03-17 11:32:20
383
原创 每日算法练习:LeetCode 55. 跳跃游戏 ✅
跳跃游戏是贪心算法的经典应用,核心是维护最远可达位置;不要陷入 “每一步具体怎么跳” 的细节,而是关注全局的最远边界;遇到的位置时,只要前面的位置能跨过它,就可以继续前进,否则就失败。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-17 11:18:46
224
原创 每日算法练习:LeetCode 122. 买卖股票的最佳时机 II ✅
这道题的最优解法是贪心算法,核心是累加所有正的价格差;多次交易的总利润等价于 “吃掉所有上涨段”,所以不需要复杂的动态规划,一次遍历即可完成;代码非常简洁,是面试中快速写出的高频模板。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-16 16:11:02
231
原创 每日算法练习:LeetCode 121. 买卖股票的最佳时机 ✅
这道题的最优解法是贪心算法,核心思想是在遍历中维护最小买入价和最大利润;O(n)的时间复杂度是处理数组类问题的理想目标,能通过所有测试用例;对比示例 1 和示例 2,算法能正确处理 “无法获利” 的情况,直接返回 0。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-15 21:01:47
221
原创 每日算法练习:LeetCode 189. 轮转数组 ✅
轮转数组的最优解法(三次反转)是面试高频考点,逻辑巧妙且空间效率拉满,必须掌握;k % n是处理轮转问题的通用技巧,能避免 k 大于数组长度带来的无效操作;双指针反转数组是基础操作,在字符串、数组类题目中广泛应用。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-14 22:24:23
333
原创 每日算法练习:LeetCode 169. 多数元素 ✅
这道题的核心魅力在于摩尔投票法,它完美利用了「多数元素出现次数超过一半」的特性,在不借助额外空间的情况下,通过简单的计数与抵消操作高效找到结果。这种思想在处理「寻找出现次数超过 1/k 的元素」等进阶问题时也有重要应用,是算法面试中必须掌握的经典技巧。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-13 23:13:26
390
原创 每日算法练习:LeetCode 80. 删除有序数组中的重复项 II ✅
这道题是「删除有序数组中的重复项」的自然延伸,核心思想依然是双指针法,只是将判断条件从「与前一个元素不同」改为「与前两个元素不同」,以此实现最多保留两次的需求。这种思路可以推广到通用去重场景:若要求最多保留k次重复项,只需将判断条件改为nums[i]!即可,是面试中的高频考点。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-12 20:15:31
171
原创 每日算法练习:LeetCode 26. 删除有序数组中的重复项✅
这道题是双指针法在有序数组上的经典应用,核心是利用数组有序的特性,通过慢指针记录唯一元素的位置,快指针寻找新元素,从而在原数组上高效完成去重。相同点:都使用快慢指针在原数组上操作,时间复杂度 O (n),空间复杂度 O (1)。不同点:「移除元素」是判断是否等于目标值,「去重」是判断是否与前一个元素相同。希望大家能通过这两道题,彻底掌握双指针法在数组操作中的核心思想。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-11 10:04:21
244
原创 每日算法练习:LeetCode 27. 移除元素 ✅
这道题的核心在于利用双指针技术,在不使用额外空间的情况下,高效地完成了元素的移除和重排。这种思想在处理数组去重、元素移动等问题时非常常见,是面试中的高频考点,希望大家能够掌握。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-10 10:35:24
236
原创 每日算法练习:LeetCode 88. 合并两个有序数组 ✅
这道题的核心在于利用nums1数组末尾的空闲空间,通过从后往前的双指针法,避免了元素的移动和覆盖,从而达到了线性时间复杂度。这种思想在处理数组合并、排序等问题时非常常见,希望大家能够掌握。今天的每日算法练习就到这里,我们明天再见!👋。
2026-03-09 14:45:00
217
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅