- 博客(195)
- 收藏
- 关注
原创 【Hot 100】347. 前 K 个高频元素
当 k 远小于元素种类 m 时,此方案效率显著优于全排序方案。例如当 m=10000,k=10 时,时间复杂度由 O(m log m) 优化为 O(m log k)。代码思路正确,但在效率上有优化空间。这道题借用了很多stl的容器和算法,然后实现的。
2025-05-24 07:00:00
193
原创 【Hot 100】739. 每日温度
维护过程如下:如果当前元素小于栈顶元素,则直接入栈,不进行操作。如果当前元素大于栈顶元素,则需要将栈顶元素弹出,并记录比栈顶元素第一个大的元素下标。直到栈中没有小于当前元素的值或者栈为空。在单调栈基础题中,经常需要类似这种的解题思路:在 O(n) 的时间复杂度内求出数组中各个元素右侧第一个更大的元素及其下标,然后一并得到其他信息。非递增的栈,也就表示当前栈内的元素都没有遇到比自己大的元素值,如果遇到了,则需要将自己弹出并记录第一个大的元素的位置等信息。
2025-05-23 07:00:00
195
原创 【Hot 100】215. 数组中的第K个最大元素 堆的相关概念
比较项三段式划分两段式划分(原地 partition)空间复杂度$O(n)$(使用3个临时数组)$O(1)$ 原地操作实现复杂度简单清晰,逻辑更直观更接近标准快排、效率更高工程实用性教学友好,适合理解 quick select实战常用(如 LeetCode 高频解法)
2025-05-23 07:00:00
1157
原创 【Hot 100】155. 最小栈
所以本道题目的关键是利用栈先进后出的特性,并且再利用一个额外的栈空间单独存储最小值。也就是一个栈存储实际的数据,一个栈用于存储对应位置处的最小值。小顶堆可以在常数时间复杂度检索到最小元素,因为其堆顶元素就是最小元素。但是出栈入栈的逻辑就无法实现了。设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。
2025-05-22 07:00:00
127
原创 【Hot 100】394. 字符串解码
通过栈的层级保存机制,每次遇到内层括号时将当前状态冻结,优先处理内层任务。内层处理完毕后,通过弹出的栈元素恢复外层状态继续处理,天然支持无限嵌套结构。),我们需要一种能保存当前处理状态,遇到内层括号时暂停当前任务,处理完内层后能恢复现场继续处理的结构。本题难点在于括号内嵌套括号,需要从内向外生成与拼接字符串,这与栈的先入后出特性对应。时,将当前字符串和数字压栈后重置,开始处理内层结构。由于字符串可能包含多层嵌套的括号结构(如。),确保能正确解析多位数。处理连续多位数字(如。
2025-05-22 07:00:00
849
原创 【Hot 100】4. 寻找两个正序数组的中位数
还有一种办法,用分别用一个指针指向两个数组的开头,并记录移动的总次数,每次比较这两个指针的值,移动小的数据,此方法的时间复杂度为 O(m+n) 还是没有达到很小,但是比刚才的暴力方法更好了一点。这道题目很像吉比特面试的时候面试官和我讨论的题目,是针对于中位数的深入理解,以及解题技巧。使用stl自带的二分搜索函数库,来实现这道题目,但是时间复杂度不满足要求。复杂度更低的代码思路,可以直接去看官方的。
2025-05-21 07:00:00
195
原创 【Hot 100】20. 有效的括号
遍历到左括号时直接入栈就行,遍历到右括号时要判断栈顶元素是否是对应的左括号,如果是的话就可以消除(换句话就是出栈)。元素压入栈,这在某些情况下会导致不必要的处理,尤其是当字符串的第一个字符就是右括号时,可以直接返回。可以通过使用一个映射表来简化左右括号的匹配判断,从而避免重复代码。语句中将右括号再次压栈,这不必要且会导致栈中的元素不对,应该改成在判断不匹配时返回。这个版本的代码更加简洁、可读性更强,同时避免了冗余的判断和操作。,而不是将不匹配的右括号压入栈。在你的代码中,遇到右括号时会在。
2025-05-21 07:00:00
434
原创 【Hot 100】33. 搜索旋转排序数组
↑旋转点(最小值1的下标)原本的,把前4个[1,2,3,4]挪到了数组后面。这个最小值(也就是原来数组的起点)的位置,我们就称为旋转点。你这种方式(找旋转点 + 标准库查找✅ 逻辑清晰;✅ 代码简洁(比手写二分更干净);✅ 利用了 STL 的优势。
2025-05-20 07:00:00
886
原创 【Hot 100】153. 寻找旋转排序数组中的最小值
的特殊情况,因为在整数的除法是向下取整的,所以mid只可能等于left(这道题目的前提是nums中的数字都唯一)。旋转后的数组其实就是两个升序数组,也可能就一个,因为旋转n次又回来了。的比较也能确定最小值的区间,但在旋转排序数组中,比较。让我更详细地解释为什么这样做更合适。,你也能确定最小值的位置。的特殊情况,因此更加高效和简单。这一道题目和上一道题目是一样的。时,不好进一步缩小区间。
2025-05-20 07:00:00
469
原创 【Hot 100】二分查找(单个目标值:查找目标值、多个目标值:查找目标值左右边界)
理解这一点之后,就能灵活地写出找左边界、右边界,甚至是插入位置的各种代码了。
2025-05-19 07:00:00
1445
原创 【Hot 100】34. 在排序数组中查找元素的第一个和最后一个位置
关于二分查找判断条件修改,可以定位目标值左右边界的讲解,在【Hot 100】二分查找(单个目标值:查找目标值、多个目标值:查找目标值左右边界)文章中有详细的说明。可以参考那篇文章。
2025-05-19 07:00:00
262
原创 【Hot 100】35. 搜索插入位置
项目你当前代码建议优化二分模板合理但有冗余判断使用标准左边界模板mid作用循环外使用,容易出错循环结束后直接返回left更稳妥可读性已经不错可加注释说明插入逻辑。
2025-05-18 07:00:00
477
原创 【Hot 100】74. 搜索二维矩阵
点表现思路清晰两段二分逻辑拆得很干净边界判断严谨能判断防止越界变量命名明确逻辑自洽,可读性强能通过所有测试完全符合 LeetCode 要求...// left - 1 就是目标行这段虽然正确,但可以写得更直观一些,比如直接写成找最后一个 ≤ target 的行,让语义更明确。不过保留你原写法也没问题,因为你注释写得清楚,不影响理解。方面你的写法优化建议正确性✅ 完美✅ 一样正确可读性✅ 强(注释清晰)⬆️ 可略简化性能✅ 可合并为 O(log mn)工程推荐✅ 很推荐。
2025-05-18 07:00:00
789
原创 【Hot 100】131. 分割回文串
回溯函数:每一层都有一个起始索引 index,然后从 index 开始遍历到字符串末尾。使用 substr 来获取子串。中直接用索引比较(你已经在主函数里实现了这一点)——如果你做了回文预处理,这一问题就自然消除了。,每次调用都会复制字符串,虽然现代编译器会优化,但可以进一步改成。是否为回文,例如在 “aabaa” 中,我们可以在主函数中预处理一个二维数组。辅助函数:判断是否是回文串。
2025-05-17 07:00:00
930
原创 【Hot 100】51. N 皇后
首先要找出有效的放置位置。如果一个皇后的位置在 [i, j] 处,那么 行和列等于 i 或 j 的位置都不行,同时 由于两条斜线位置也不能摆放,所以又要满足两个条件:(1)行下标与列下标之差相等(2)行下标与列下标之和相等。可以参考官方的优化代码。
2025-05-17 07:00:00
352
原创 【Hot 100】22. 括号生成
这一题就是要考虑清楚每一层决策树可以做出的选择和什么相关。该题每一层的决策与左括号和右括号的数量以及n有关。➡️ 这种做法用于极端性能优化场景,LeetCode 上一般不需要。,特别是在逻辑约束判断上做得很好,下面我将从四个方面分析你的代码。对括号),将当前路径加入结果集。,我们要从所有可能的括号排列中,这段代码非常扎实、结构清晰,是通过引用传递并手动回滚(来回操作,逻辑上更干净。
2025-05-16 07:00:00
735
原创 【Hot 100】79. 单词搜索
你准确抓住了题目的核心:从矩阵的每一个字符出发,尝试在四个方向上递归寻找下一个字符,直到组成目标字符串或回溯。枚举起点遍历board中每个格子,找到所有可能的起点(即字符等于word[0]的点)开始 DFS。DFS + 回溯搜索路径从当前点出发,向四个方向递归搜索,只要路径当前拼接的字符串等于word,立即返回true。剪枝条件越界判断;已访问判断(用visited标记);当前字符是否匹配下一个目标字符。回溯操作添加字符 → 递归 → 回溯(撤销字符 + 撤销访问状态)。项目评价。
2025-05-16 07:00:00
820
原创 【Hot 100】17. 电话号码的字母组合
本题就是将号码替换成字母的排列。每一个数字对应一个字符串,然后决策树的每一层就是遍历这个字符串。当前层遍历该数字对应的所有字母,每选一个字母就递归进入下一层。递归回来后撤销选择(➡️ 优点:更直观、可拓展,但略微降低性能(LeetCode 上完全够用)。每一个数字对应一组字母(最多 4 个),因此整棵树的。,说明已经构造出了一个完整的字母组合,加入结果集。由于每次递归都固定向下一位推进,可以直接用。,每层根据当前数字遍历其对应的所有字母。➡️ 优点:代码更紧凑,少传一个变量。
2025-05-15 07:00:00
831
原创 【Hot 100】39. 组合总和
优点说明✅ 回溯逻辑正确处理了重复元素、组合去重✅ 使用sum提前剪枝减少递归深度✅ 变量命名清晰sumpathstartIndex表意准确✅ 使用引用传参提升性能,避免拷贝。
2025-05-15 07:00:00
661
原创 【Hot 100】46. 全排列,以及回溯算法
回溯算法是解决组合、排列、子集、棋盘类问题的利器,通过递归和剪枝平衡穷举与效率。掌握其模板和适用场景后,可灵活应对大多数暴力搜索问题。
2025-05-14 07:00:00
1313
原创 【Hot 100】78. 子集
和上一道全排列的题目有异曲同工之处,都是使用回溯。只不过这个子集,每一层要采用一个起始索引来标识遍历的范围。的,主要取决于你是否想显式表达“到头了就返回”。
2025-05-14 07:00:00
397
原创 【Hot 100】208. 实现 Trie (前缀树)
代码逻辑正确,但存在内存泄漏问题。建议通过析构函数或智能指针优化内存管理。其他优化可根据实际需求选择。// 智能指针数组public:if (!if (!if (!
2025-05-13 10:34:37
759
原创 【学习路线】 游戏客户端开发入门到进阶
游戏开发是一个交叉性极强的技术领域,对开发者提出了高维度的要求。作为初学者,不要急于求成,打牢基础、注重原理、勤于实践,你的成长将会非常快速而稳健。希望这份学习路线与书单能为你指明方向,迈出职业开发者的第一步。
2025-05-13 10:00:17
947
原创 【Hot 100】198. 打家劫舍
分别记录前前一个和当前的最大金额。每次遍历到一个新房屋时,计算偷或不偷该房屋的较大值,并更新这两个变量。这样既保证了时间复杂度为 O(n),空间复杂度为 O(1)。这道题是一个典型的dp问题。也就是说后面的状态可以由前面的状态递归而来。首先回顾一下题目的要求,求解小偷沿屋偷窃完之后最大能盗取的金额。主要是优化了代码空间,因为当前状态主要由前两个状态决定,所以只需要两个变量来记录前两个状态即可。今天做题跳跃一点,开始动态规划专题。使用动态规划,通过两个变量。
2025-05-12 07:00:00
1259
原创 【Hot 100】994. 腐烂的橘子
用 BFS 如果需要最短路径、分层处理、状态空间步数最小化。问题类似“扩散”、“最少步数”、“层序遍历”。用 DFS 如果需要递归/回溯、遍历所有解、连通性分析。问题类似“所有可能”、“连通区域”、“排列组合”。灵活结合:某些问题可以同时用 BFS 和 DFS(如“岛屿数量”),但要根据问题特点选择更优解。
2025-05-11 07:00:00
663
原创 【Hot 100】207. 课程表
理解图的基本概念(有向/无向图、入度/出度)和存储方式(邻接表/矩阵)是掌握拓扑排序的基础。BFS和DFS方法分别通过入度管理和路径检测来解决环的存在性问题,两种方法均高效且易于实现。实际应用中,邻接表+BFS的组合在大多数场景下更为常见。
2025-05-11 07:00:00
969
原创 【笔试】 网易雷火校园招聘笔试编程题类型
动态规划:编辑距离、打家劫舍、最长回文子串等经典问题(需掌握状态转移方程优化)。字符串处理:加密解密、模式匹配、复杂模拟题(如文本编辑器)。图论与搜索:BFS/DFS在路径问题或状态模拟中的应用。数学与数论:质因数分解、欧拉函数、数位DP(如最小F(x)=φ(x)/x问题)。
2025-05-10 07:00:00
1665
原创 【Hot 100】200. 岛屿数量
递归终止条件顺序:先判断坐标合法性,再访问数组,确保不会越界。空间优化:直接修改原数组,无需额外空间。扩展性:若需保留原数组数据,可创建visited数组记录访问状态。你的代码已经正确实现了核心逻辑,上述优化可根据实际场景选择应用。
2025-05-10 07:00:00
624
原创 【Hot 100】236. 二叉树的最近公共祖先
这个解法在大多数情况下工作良好,但如果追求更优的解法,可以考虑一次遍历同时查找两个节点的公共祖先,这样可以将时间复杂度优化到单次遍历。代码思路是正确的,通过分别找到从根节点到p和q的路径,然后比较这两条路径来找到最后一个公共节点。在查找二叉树路径的时候,在递归完左右子树后,还需要再判断刚才左右子树是否找到路径,找到路径的话直接返回才行。初步的思路,找出从根节点到这两个节点的路径,然后遍历这两个路径判断第一个公共的节点是谁。从今天的题目来看,自己在遍历路径方面还有些不熟练,要再多练习。
2025-05-09 07:00:00
1222
原创 【Hot 100】124. 二叉树中的最大路径和
区分节点的"贡献值"(返回给父节点)和"完整路径值"(更新全局最大值)贡献值只能选择一边(左或右),而完整路径可以包含两边负贡献值被舍弃(取0)这种分治法的思路非常经典,理解后可以解决许多类似的树形DP问题。
2025-05-09 07:00:00
698
原创 【Hot 100】114. 二叉树展开为链表
你的优化解法是正确的,利用了后序遍历的特性,实现了原地修改。它的时间复杂度是 O(n),空间复杂度是 O(h)(递归栈的深度,h 是树的高度)。对于大多数情况,这是一个非常优雅的解法!
2025-05-08 07:00:00
842
原创 【Hot 100】105. 从前序与中序遍历序列构造二叉树
当前你在每次递归时都线性搜索根节点在中序遍历中的位置,这会导致时间复杂度较高(最坏情况下为O(n^2))。可以使用哈希表(unordered_map)预先存储中序遍历的值和索引,这样可以将查找时间降到O(1),整体时间复杂度优化到O(n)。总结:递归的逻辑其实不复杂,每次都通过前序和中序数组构建当前的根节点,然后递归构建左右子树即可。不过,还有一些可以优化的地方,特别是在查找中序遍历中根节点索引的部分。:虽然题目保证输入合法,但在实际工程中,可以添加一些检查(如前序和中序数组长度是否一致)。
2025-05-08 07:00:00
1296
原创 【Hot 100】437. 路径总和 III
可以考虑使用前缀和的方法来优化时间复杂度到O(n),通过哈希表记录路径上的前缀和,从而快速计算是否存在满足条件的子路径。题目要求我们找出二叉树中所有路径,这些路径上的节点值之和等于给定的目标值。这里的路径不需要从根节点开始,也不需要在叶子节点结束,但必须是从父节点指向子节点的方向。这道题的关键在于如何高效地遍历所有可能的路径,并计算它们的和是否等于目标值。这道题目看着有点难,需要找出所有的路径,遍历路径的话可以采用递归+回溯来实现,将每一种路径添加到路径集合中。,然后在递归左右子树时传入的是。
2025-05-08 07:00:00
757
原创 【Hot 100】98. 验证二叉搜索树
原始代码问题:空间复杂度高,未处理边界。推荐优化方法1:递归中序遍历,实时比较前驱节点。方法2:迭代法,进一步优化空间。选择建议:优先使用方法1,代码简洁且高效;若树深度较大,考虑方法2。
2025-05-07 07:00:00
751
原创 【Hot 100】230. 二叉搜索树中第 K 小的元素
递归调用会有栈空间的开销,尤其是当树很高时可能导致栈溢出。可以用迭代(显式栈)实现中序遍历,同样支持提前终止。但是其实可以在中序递归遍历的时候记录一下当前遍历了几个元素,可以用全局变量记录也可以用引用传参记录。可以通过成员变量或全局变量替代,减少递归函数的参数传递。但这样会牺牲一定的封装性,需权衡。这道题目最暴力的解法就是中序遍历结果保存在数组里面然后直接通过索引值返回。通过中序遍历(左-根-右)来找到二叉搜索树(BST)中第。BST 的中序遍历结果是一个升序序列,因此第。个被访问的节点就是第。
2025-05-07 07:00:00
835
原创 【Hot 100】199. 二叉树的右视图
另一种思路是从左到右public:if (!while (!// 记录每层最后一个节点return res;
2025-05-07 07:00:00
1194
原创 【Hot 100】102. 二叉树的层序遍历
你的原始代码已经足够高效,优化空间有限。如果追求极致性能,可以考虑提前分配cur的空间(但对小规模数据影响不大)。其他优化(如std::move)更多是编码习惯,实际性能提升可能不明显。保持当前写法也是完全合理的!
2025-05-06 07:00:00
748
原创 【Hot 100】108. 将有序数组转换为二叉搜索树
你的原始代码已经非常高效,主要优化点是避免整数溢出(虽然LeetCode的测试用例可能不覆盖此场景)。其他优化(如迭代法)可能增加代码复杂度,但实际收益有限。保持当前递归写法是推荐的做法,清晰且易于维护。
2025-05-06 07:00:00
1000
原创 【Hot 100】101. 对称二叉树
树的问题常考虑递归:许多树的问题都可以通过递归优雅地解决。不能仅依赖遍历结果:树的遍历序列会丢失结构信息,需要谨慎使用。对称性的本质:理解对称二叉树的定义是关键——不仅是值对称,结构也必须对称。这个题目教会我们,有时候看似简单的题目需要深入理解问题的本质才能找到正确的解决方法。
2025-05-05 07:00:00
622
原创 【Hot 100】543. 二叉树的直径
方法时间复杂度空间复杂度关键优化点原始解法(双重递归)O(n²)O(h)每个节点都重新计算深度,导致重复计算优化解法(后序遍历)O(n)O(h)在计算深度的同时更新直径,避免重复计算核心思想:后序遍历保证我们先知道左右子树的深度,再计算当前节点的深度和直径。全局变量记录遍历过程中出现的最大直径。这样,我们只需要一次遍历就能高效解决问题!🚀。
2025-05-05 07:00:00
683
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人