- 博客(23)
- 收藏
- 关注
原创 代码随想录Day60 | 图论-part10(SPFA、bellman_ford判断负权回路、bellman_ford单源有限最短路)
本文总结了三种基于Bellman-Ford算法的图论问题解法:1) SPFA队列优化用于求解单源最短路径,通过队列管理待松弛节点;2) 通过增加路径边数计数判断负权回路,当边数≥n时存在负环;3) 处理边数限制的最短路问题时,采用分层遍历和临时距离数组确保不超过k次松弛。三种方法均基于动态松弛思想,通过不同策略处理特定约束条件,其中SPFA通过队列优化减少冗余计算,负环检测通过路径计数实现,边数限制则通过分层控制松弛轮次。
2026-05-26 22:02:49
233
原创 代码随想录Day61 | 图论-part11(Floyd 算法、A * 算法)
本文摘要了两道算法题的解题过程。第一题使用Floyd算法求解图中所有节点间最短路径,初始实现存在遍历不完整和初始化错误的问题,修正后采用三层循环正确实现了算法。第二题使用A算法解决骑士移动问题,相比BFS减少了搜索空间,通过启发式函数(F=G+H)优化路径搜索,其中G为实际步数,H为预估距离。A算法通过优先队列选择最优路径,有效解决了BFS内存超限的问题。两题均通过算法优化提升了效率,体现了不同算法在特定场景下的适用性。
2026-05-20 20:47:11
495
原创 代码随想录Day59 | 图论-part09(dijkstra(堆优化版)、Bellman_ford 算法)
本文介绍了两种最短路径算法:Dijkstra堆优化版和Bellman-Ford算法。Dijkstra算法使用优先队列优化,适用于无负权边的图,通过维护最小距离数组和访问标记实现。Bellman-Ford算法通过n-1次边松弛操作处理可能含负权边的图,可检测负权环。两种算法都需注意边界条件,如距离初始化和提前终止条件。代码实现展示了两种算法的核心逻辑和常见错误修正方法。
2026-05-19 21:13:58
47
原创 代码随想录Day57 | 图论-part08(拓扑排序、Dijkstra朴素版)
本文总结了拓扑排序和Dijkstra算法的解题思路。在拓扑排序中,通过维护入度表和优先队列实现节点排序,初始错误在于将所有节点放入堆中而非仅入度为0的节点。Dijkstra算法部分,DFS解法因超时被弃用,改用朴素版Dijkstra,通过贪心策略选择最近节点并更新最短距离数组。文章还比较了Dijkstra与Prim算法的区别:前者计算节点到源点的最短距离,后者计算节点到最小生成树的最小距离。两种算法都需注意初始化条件和访问标记的正确设置。
2026-05-16 13:51:08
38
原创 代码随想录 Day22 | 回溯算法-part01(77. 组合、216.组合总和III、17.电话号码的字母组合)
本文总结了回溯算法在组合问题中的应用,包括组合生成、剪枝优化等技巧。主要内容:1. 组合问题(77题)使用回溯模板,通过限制起始索引和剩余数字个数进行剪枝优化;2. 组合总和III(216题)采用和与个数双重剪枝,并介绍"选或不选"的两种思路;3. 电话号码字母组合(17题)建立数字-字母映射递归生成结果,注意空字符串处理。文章提供了通用模板和易错点提示,如剪枝边界计算、递归终止条件判断等,并强调时间复杂度为O(k*C(n,k))。
2026-04-08 21:43:40
183
原创 代码随想录 Day21 | 二叉树-part08(669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树)
本文总结了二叉树相关算法题的解题思路和实现方法。主要包括:1)修剪二叉搜索树时递归处理左右子树,迭代法需先调整根节点位置;2)有序数组转二叉搜索树采用分治策略,取中点递归构建;3)BST转累加树通过反向中序遍历实现节点值累加。文章提供了递归和迭代两种解法模板,并指出常见易错点,如修剪BST时需同时处理左右子树、数组转BST时避免切片复制等。学习时长为1.5小时,涉及递归、分治和遍历等核心算法思想。
2026-04-07 21:43:28
333
原创 代码随想录 Day18 | 二叉树-part06(530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先)
算法题解摘要 530. 二叉搜索树的最小绝对差 方法:利用二叉搜索树中序遍历的有序性,比较相邻节点的差值 实现:中序遍历迭代法,维护pre指针记录前驱节点,实时更新最小差值 复杂度:时间O(n),空间O(h) 501. 二叉搜索树中的众数 方法:中序遍历时统计连续相同值的频率 实现:递归/迭代中序,维护count和maxCount,实时更新结果列表 关键点:当count>maxCount时清空结果列表并更新maxCount 236. 二叉树的最近公共祖先 方法:后序遍历递归检查子树是否包含目标节点 实
2026-04-07 15:25:02
356
原创 代码随想录 Day20 | 二叉树-part07(235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点)
本文总结了二叉搜索树(BST)的三个关键操作:最近公共祖先、节点插入和节点删除。对于235题LCA问题,利用BST性质通过比较节点值确定搜索方向,无需路径回溯。701题节点插入操作需找到合适空位并记录父节点进行连接。450题节点删除最为复杂,分四种情况处理,重点介绍了值交换法(递归删除前驱/后继节点)和合并法(将左子树挂到右子树最左节点)两种实现方式。所有操作时间复杂度均为O(h),平均O(logn),最坏O(n)。关键点在于充分理解BST的性质,注意处理边界条件和递归实现细节。
2026-04-07 14:53:12
401
原创 代码随想录 Day17 | 二叉树-part05(654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树)
今日总结主要涵盖二叉树和二叉搜索树相关题目: 654最大二叉树:通过递归找最大值分割数组构建树(O(n²)),优化方法包括索引范围递归和单调栈(O(n)) 617合并二叉树:递归合并两棵树,处理节点为空情况 700二叉搜索树搜索:利用BST性质递归/迭代查找 98验证BST:中序遍历结果应严格递增,可用数组或pre指针优化空间 关键点:递归实现需注意时间复杂度优化,单调栈法构建最大二叉树需理清节点连接逻辑,BST操作要利用其有序特性。
2026-04-03 11:21:50
191
原创 代码随想录 Day16 | 二叉树-part04(513. 找树左下角的值、112. 路径总和、106. 从中序与后序遍历序列构造二叉树)
今日总结了三道二叉树题目解法: 513.找树左下角的值:采用层序遍历,记录每层首个节点值,最终返回最后一层首值。 112/113.路径总和:112题通过递归判断是否存在目标路径和;113题用DFS回溯记录所有满足条件的路径,注意列表需显式pop回溯。 106/105.构造二叉树:根据后序/前序与中序序列递归构建,重点在于切割区间的一致性。优化方案使用哈希表存储中序索引,将时间复杂度从O(n²)降至O(n)。 关键点:层序遍历用队列,路径问题注意回溯处理可变对象,构造二叉树时保持切割区间不变量。学习时长1.5
2026-04-02 17:04:22
375
原创 代码随想录 Day15 | 二叉树-part03(110.平衡二叉树 、257. 二叉树的所有路径、404.左叶子之和、222.完全二叉树的节点个数)
本文总结了二叉树相关算法题的解题思路和优化方法。对于平衡二叉树(110题),提出递归计算高度时同步判断平衡性,通过返回-1提前终止遍历,将时间复杂度从O(n²)优化到O(n)。二叉树路径问题(257题)采用回溯法,注意路径数组的复制以避免引用问题。左叶子求和(404题)强调在父节点判断左子节点的特性。完全二叉树节点计数(222题)展示了两种解法:层序遍历O(n)和利用完全二叉树特性的O(log²n)优化方法。文中还总结了各题的易错点,如路径引用共享、左叶子定义混淆等,并提供了优化后的代码模板。
2026-04-01 12:12:03
342
原创 代码随想录 Day14 | 二叉树-part02( 226.翻转二叉树 、101. 对称二叉树、104.二叉树的最大深度 、111.二叉树的最小深度)
本文总结了二叉树相关算法题的解题思路和实现要点:1. 翻转二叉树采用后序遍历递归实现,注意使用临时变量避免覆盖问题。2. 对称二叉树不能依赖中序遍历回文判断,应递归比较左右子树的镜像关系。3. 最大深度直接递归返回左右子树深度的较大值加1。4. 最小深度需特殊处理,当某子树为空时取另一子树的深度。文章提供了各题的代码模板,并重点分析了易错点:翻转时的变量覆盖、对称性判断的特殊情况、最小深度的叶子节点条件判断等。时间复杂度均为O(n),空间复杂度取决于树高。
2026-04-01 09:36:44
345
原创 代码随想录 Day11 | 栈与队列-part02(150. 逆波兰表达式求值、239. 滑动窗口最大值、 347.前 K 个高频元素)
单调队列、堆
2026-03-28 12:19:51
198
原创 代码随想录 Day10 | 栈与队列-part01(232.用栈实现队列、225. 用队列实现栈、 20. 有效的括号、1047. 删除字符串中的所有相邻重复项)
本文总结了使用栈和队列解决算法问题的技巧:1. 用两个栈实现队列(232题)时,输入栈负责push,输出栈负责pop/peek,当输出栈为空时将输入栈元素全部倒入即可实现FIFO。2. 用两个队列实现栈(225题)需要每次将主队列除最后一个元素外全部移到辅助队列,再交换两者。3. 括号匹配(20题)使用栈结构,右括号需匹配栈顶的左括号。4. 删除相邻重复项(1047题)通过栈模拟,遇到相同字符则弹出栈顶。文章提供了各问题的代码模板,并指出常见易错点,如peek操作不弹出元素、队列倒换顺序的特殊处理等。时间复
2026-03-27 20:58:15
301
原创 代码随想录 Day9 | 字符串-part02(151.翻转字符串里的单词、卡码55.右旋转字符串、28. 实现 strStr()、459.重复的子字符串)
今日学习总结主要包含字符串处理和KMP算法应用。重点内容:1. 字符串反转与切片操作(151题、55题),掌握split()、join()和[::-1]切片技巧;2. KMP算法实现(28题),理解next数组构建和匹配过程,时间复杂度优化至O(n+m);3. 重复子串判断(459题),利用KMP的next数组性质实现O(n)解法。关键收获:掌握字符串处理的高效方法,深入理解KMP算法原理,学会通过前缀表优化模式匹配。易错点包括next数组构建时的索引处理、空字符串边界条件等。学习时长1.5小时。
2026-03-27 17:24:53
244
原创 代码随想录 Day8 | 字符串-part01(344.反转字符串、541. 反转字符串II、卡码54.替换数字)
本文总结了字符串处理相关的三道算法题:344.反转字符串使用双指针原地交换字符;541.反转字符串II通过步长为2k的遍历处理前k个字符的反转;卡码54.替换数字将数字替换为"number"。主要技巧包括双指针法、字符串切片反转和步长遍历处理周期性操作。关键点:注意反转区间范围,Python字符串不可变性,以及双指针交换的简化写法。典型模板包括双指针交换、步长处理和字符替换收集。学习时长50分钟,重点掌握基础字符串操作和边界条件处理。
2026-03-25 17:39:25
238
原创 代码随想录 Day7 | 哈希表-part02(454.四数相加II、383.赎金信、15.三数之和、18.四数之和)
今日算法学习总结: 四数相加II使用哈希表分治思想,将O(n⁴)优化为O(n²),注意统计次数时需累加哈希表中的值而非简单+1。 赎金信通过字符计数解决,可用Counter相减或字符串count方法判断包含关系。 三数之和采用排序+双指针,重点在于去重处理:外层循环跳过重复元素,内层找到解后用while跳过重复指针。 四数之和扩展三数解法,需注意剪枝条件在负数情况下的特殊性,不能简单比较target。 关键技巧:哈希分治降复杂度、双指针配合排序处理多数和、严格去重逻辑、考虑负数影响的剪枝优化。
2026-03-25 16:35:55
329
原创 代码随想录 Day6 | 哈希表-part01( 242.有效的字母异位词、349. 两个数组的交集 、202. 快乐数、1. 两数之和 )
本文总结了哈希表相关算法题的解题思路和实现方法。主要包括:1. 有效的字母异位词(使用数组模拟哈希表进行计数比较);2. 两个数组的交集(利用集合特性去重求交);3. 快乐数(通过集合或快慢指针检测循环);4. 两数之和(哈希表一次遍历实现)。文章分析了各类题目的解题技巧、时间复杂度、常见错误及优化方法,并提供了Python实现模板。重点强调了哈希表的不同实现方式(数组、集合、字典)的选择依据,以及在处理字符串、数值等问题时的应用技巧。
2026-03-24 12:24:43
213
原创 代码随想录 Day4 | 链表-part02(24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、160.链表相交、142.环形链表II)
今日算法练习总结:通过4道链表题目掌握了关键解题技巧。两两交换节点采用虚拟头节点和临时指针,重点在于交换后更新前驱指针;删除倒数第N个节点使用快慢指针,快指针先走n+1步使慢指针指向待删除前驱;链表相交通过双指针交替遍历寻找交点;环形链表先用快慢指针判断环存在,再重置快指针找入口。核心收获:虚拟头节点能统一处理边界情况,双指针法能有效解决位置相关操作,环形链表需分两步处理。时间复杂度均为O(n),空间复杂度O(1)。
2026-03-21 15:55:16
379
原创 代码随想录 Day2 | 数组-part02(209.长度最小的子数组、59.螺旋矩阵II、58.区间和、44.开发商购买土地)
本文总结了数组相关算法题的解题思路,主要包括滑动窗口、循环不变量和前缀和等技巧。重点分析了209题"长度最小的子数组"的滑动窗口解法,通过优化窗口收缩逻辑将时间复杂度降至O(n)。59题"螺旋矩阵II"采用方向数组模拟方法,注意处理边界条件和转向逻辑。文章提供了Python实现代码,并指出了常见错误点,如死循环问题、边界判断等。通过对比原始版本和优化版本,展示了算法改进的思路。
2026-03-19 22:00:49
357
原创 代码随想录Day1 | 数组-part01(704. 二分查找、 27. 移除元素、977.有序数组的平方)
本文总结了数组相关的三道算法题:二分查找、移除元素和有序数组的平方。704题介绍了二分查找的两种模板(左闭右闭和左闭右开),时间复杂度O(log n)。27题使用双指针法高效移除元素,时间复杂度O(n)。977题通过双指针从两端向中间比较,将平方大的元素从后往前填入新数组,实现O(n)时间复杂度。三题均涉及数组基础操作,重点掌握二分查找和双指针技巧。
2026-03-18 21:23:49
482
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅