- 博客(203)
- 收藏
- 关注
原创 2026-04-09~10-复习计划+蓝桥杯注意的点
本文总结了2026年4月9-10日的算法复习内容,主要包括:1) 两日复习计划,涵盖DFS/BFS题型、图论、二叉树、DP等专题;2) DFS与BFS的应用场景对比分析;3) 图的存储方式(邻接矩阵/邻接表)及特性;4) 二叉树遍历方法(前/中/后序)与递归实现。重点整理了算法选择逻辑和数据结构实现要点,为蓝桥杯竞赛做最后的知识梳理与技巧准备。(149字)
2026-04-10 22:08:09
466
原创 【算法打卡day40(2026-04-08 周三)】贪心训练8个蓝桥杯真题
本文记录了作者在算法训练中的4道贪心算法题目练习。第一题通过数位分析找到最优管道长度;第二题采用贪心策略计算硬币翻转最小次数;第三题使用双指针法求解最长子序列;第四题统计字符频率实现字符串修改优化。针对即将到来的蓝桥杯比赛,作者决定重点复习DFS、BFS等常用算法。每道题目均附有完整代码实现和解题思路分析。(149字)
2026-04-09 09:41:00
376
原创 【算法打卡day39(2026-04-06~08 周一~周三)】(10道蓝桥杯真题)今日练习:蓝桥杯第13届省赛B组Cpp组
本文记录了2026年4月6日至8日期间蓝桥杯第13届省赛B组C++组的算法练习情况。主要内容包括:1) 九进制转十进制题目解答;2) 顺子日期问题的0分版本和修改后正确版本,分析了日期字符串拼接错误等关键问题;3) 刷题统计题目从部分通过到全部通过的优化过程,指出原代码超时问题并通过直接计算解决。作者在最后两天集中复习已做题目,虽然动态规划题型仍存在困难,但转向贪心算法练习。整个练习过程体现了对算法问题的持续改进和优化思路。
2026-04-08 18:41:35
601
原创 【算法打卡day38 day39(2026-04-05~06 周日 周一)】(18道题)今日练习:枚举专项训练2-全部是蓝桥杯真题
【算法打卡day38(2026-04-05~06 周日 周一)】(18道题)今日练习:枚举专项训练2-全部是蓝桥杯真题
2026-04-08 18:14:56
403
原创 【算法打卡day37(2026-04-04 周六)】DFS专项训练4-枚举专项训练 1-全部是蓝桥杯真题
本文摘要: 文章分享了蓝桥杯真题"黑白棋填充"的DFS解法。题目要求在6×6棋盘上填充黑白棋子,满足行列黑白数量相等、无连续三个同色棋子、行列排列唯一等条件。作者详细分析了初始错误(将条件判断过早置于DFS过程中),并修正为仅过程中检查连续棋子条件,最终填充后再验证其他条件。提供了完整的C++代码实现,包括回溯处理和剪枝优化。通过坐标记录空白位置,逐格尝试0/1填充,确保唯一解输出36位字符串。该解法展示了DFS在约束满足问题中的典型应用与调试思路。
2026-04-04 20:42:29
398
原创 【算法打卡day36(2026-04-02 周四)】DFS专项训练3
本文摘要: 郑龙浩在2026年4月1日的算法打卡中完成了两道DFS专项训练题。第一题是洛谷P1088火星人问题,要求对给定排列进行M次字典序递增操作。作者通过分析发现可以直接使用C++的next_permutation函数实现,避免了手动编写DFS的复杂性。第二题是4×4数独游戏,需要满足行列和2×2子块不重复的条件。作者采用DFS回溯算法,逐步填充空白格子并验证条件,当所有格子填完时输出解。两题都体现了DFS在排列组合问题中的应用,第二题还结合了回溯思想解决约束满足问题。 (字数:149)
2026-04-02 20:53:31
401
原创 【算法打卡day35(2026-03-31 周二)】DFS专项训练2(今日算法:DFS & 记忆化搜索 & 回溯)
【算法打卡day35(2026-03-31 周二)】DFS专项训练2(今日算法:DFS & 记忆化搜索 & 回溯)
2026-04-02 20:50:10
439
原创 【算法打卡day34(2026-03-30 周一)】DFS专项训练(今日算法:DFS & 记忆化搜索 & 回溯)
摘要: 本文包含两个算法题目解析。第一题(洛谷P1464)通过递归实现Function函数,采用记忆化搜索优化性能,并进一步通过预处理所有可能结果提升效率。第二题(洛谷B3621)使用DFS回溯生成所有n元组,按字典序输出1到k的整数组合。两题均通过空间换时间策略优化性能,适用于大规模输入场景。代码实现涵盖递归控制、记忆化存储及回溯遍历等核心算法技巧。
2026-03-30 21:10:40
385
原创 【算法打卡day30(2026-03-23 周一)】BFSDFS孤岛题型-复习 & 第15届蓝桥杯省赛B组C++
摘要: 作者郑龙浩记录2026年3月22-23日的算法学习日志,主要复习BFS/DFS孤岛问题并完成第15届蓝桥杯省赛B组C++真题。前几日因项目计划书中断练习,21日首次尝试真题时因BFS/DFS生疏表现不佳。22日通过卡码网99题(计数孤岛)和力扣100题(最大岛屿面积)重拾题感,分别用DFS/BFS实现,并对比了两种方法中计数变量cnt++的位置差异(入队时标记可避免重复,出队时计数更简洁)。次日计划修正真题错误并练习第14届真题。代码部分展示了矩阵遍历、方向数组及访问标记的核心逻辑。
2026-03-23 23:29:25
527
原创 【算法打卡day28(2026-03-20 周五)】蓝桥云课难度Lv.1题集 & Lv.2
古罗马帝国开创了辉煌的人类文明,但他们的数字表示法的确有些繁琐,尤其在表示大数的时候,现在看起来简直不能忍受,所以在现代很少使用了。之所以这样,不是因为发明表示法的人的智力的问题,而是因为一个宗教的原因,当时的宗教禁止在数字中出现 0 的概念!构造一个长度为n的字符串”这个问题,等价于“分别以A、B、C开头,后接一个长度为n-1的子字符串”这三个子问题的总和,所以这个就是return的内容。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的 n 瓶饮料,最后他一共能喝到多少瓶饮料。
2026-03-23 23:25:04
413
原创 【算法打卡day27(2026-03-19 周四)】蓝桥云课中Lv.1难度中的绝大部分题
本文记录了作者在蓝桥云课刷题过程中的心得体会和解题思路。作者发现Lv.1难度的题目中,填空题比编程题更具挑战性,需要理解出题人思路而非自主构思。文章展示了6道Lv.1难度题目的解法,包括幸运数字模拟、英文字母转换、3的倍数判断、双阶乘计算等,重点分析了填空题的解题技巧,如通过取模简化计算过程。作者认为部分填空题实际难度超出预期,涉及动态规划等算法知识,给解题带来困扰。
2026-03-19 21:05:59
872
原创 【算法打卡day26(2026-03-18 周三)今日算法:「回溯算法」& 蓝桥杯真题(简单题型)】7个
摘要: 本文记录了2026年3月18日关于回溯算法的刷题总结。作者通过两道力扣题目(131-分割回文串、93-复原IP地址)实践回溯算法,重点分析了递归抽象化思维的重要性,指出过度关注递归细节反而影响理解。在分割回文串中,通过拆分字符串并验证回文子串;复原IP地址则通过剪枝优化(剩余字符长度校验)和分段合法性判断实现。作者反思需加强“去重”场景的掌握,建议以当前层逻辑为核心,避免陷入递归全过程的模拟。代码实现中结合模板与部分自主调试完成,部分边界问题通过AI修正。整体体现了从模糊到初步掌握回溯的进阶过程。
2026-03-18 21:10:39
452
原创 递归和回溯的技巧:不要理解「递归细节」,只需要抽象理解当前层即可,相信当前层的递归函数「能处理好后面的所有事情」
摘要:递归思维的关键转变 初学回溯算法时,常陷入递归细节的模拟,导致认知过载。正确做法是采用抽象思维: 信任递归:将嵌套函数视为黑盒,相信它能完成后续任务 聚焦当前层:只需处理本层选择(添加/移除元素)和递归调用 分离关注点:不深究调用栈细节,通过数学归纳法理解功能 降低复杂度:人脑适合3-4层思考,抽象后只需处理单层逻辑 这种"递归信任"能显著提升解题效率,是掌握回溯算法的关键突破点。练习时应先明确函数职责,再用小数据验证,逐步培养抽象思维能力。 (字数:150)
2026-03-18 19:34:56
513
原创 【算法打卡day25(2026-03-17 周二)今日算法:「回溯算法」】1-力扣17-电话号码的字母组合 2-力扣39-组合总和 3-力扣40-组合总和II
摘要:2026年3月17日,作者郑龙浩记录了算法刷题第25天的学习情况。当天主要尝试解决回溯算法相关问题,包括力扣17题(电话号码字母组合)、39题(组合总和)和40题(组合总和II)。作者发现回溯算法难度较大,特别是涉及特殊条件时难以理解,最终决定暂停回溯算法的练习,转向蓝桥杯真题和基础算法题。文章详细记录了3道回溯题目的解题思路和代码实现,包括递归回溯模板的应用、剪枝优化等技巧,同时表达了在有限时间内(距离蓝桥杯25天)合理规划学习进度的思考。
2026-03-17 20:15:59
338
原创 【算法打卡day24(2026-03-16 周一)今日算法:「回溯算法」和「回溯剪枝」】1-力扣77-组合(普通做法 & 剪枝优化)2-力扣216-组合总和III
文章摘要: 本文探讨了回溯算法在组合问题中的应用,以力扣77题为例,展示了普通回溯与剪枝优化两种解法。通过递归模拟多层循环,将问题抽象为树结构,k层递归对应树的深度,for循环遍历对应树的宽度。剪枝优化通过限制for循环范围,避免无效搜索(当剩余元素不足时)。代码示例详细说明了两种实现方式,并解释了递归终止条件和剪枝原理。该算法有效解决了组合问题,特别适用于k值较大的情况。
2026-03-16 21:10:45
412
原创 【算法打卡day23(2026-03-15 周日)今日算法or技巧:双指针 & 链表 & 回溯算法】6个题
本文介绍了删除链表倒数第N个节点的三种方法: 计算链表长度:先遍历获取链表长度,再定位到倒数第N+1个节点进行删除操作。 利用栈结构:将所有节点压入栈,弹出后N个节点后,栈顶即为待删除节点的前驱节点。 双指针法:快慢指针保持N的间距,当快指针到达末尾时,慢指针指向待删除节点的前驱节点。 三种方法均通过虚拟头节点统一处理边界情况,其中双指针法效率最优,时间复杂度为O(L),空间复杂度为O(1)。
2026-03-15 21:08:11
341
原创 【算法打卡day22(2026-03-14 周六)今日算法or技巧:双指针 & 链表】9个题
今日算法打卡主要练习了双指针和链表相关题目。内容包括:替换数字字符(卡码网54)、反转字符串中的单词(力扣151)、右旋字符串(卡码网55)、字符串匹配(力扣28)以及链表操作(反转链表和两两交换节点)。其中反转字符串单词题使用了快慢指针技巧,需要特别注意边界处理。作者在练习过程中误将双指针题目刷成了链表题,但借此机会加强了链表操作的熟练度。明日计划完成剩余5道双指针题目。
2026-03-14 20:53:00
432
1
原创 【算法打卡day21(2026-03-13 周五)算法/技巧:哈希表,双指针,字符串交换处理】5个题
算法打卡Day21摘要 日期:2026-03-13 内容: 赎金信(力扣383):使用哈希表统计magazine字符频次,遍历ransomNote验证字符可用性,时间复杂度O(n)。 三数之和(力扣15):采用排序+双指针法,固定首元素后双指针搜索剩余两数,通过跳过重复元素保证结果唯一性,重点处理去重逻辑。 总结:当日课程密集导致刷题量少,两题分别巩固哈希表应用和双指针技巧,后者需注意排序预处理和去重细节。
2026-03-13 21:04:39
394
原创 【算法打卡day20(2026-03-12 周四)算法:前缀和,二维前缀和,快慢指针,哈希表set使用技巧,哈希表map使用技巧】7个题
2026年3月12日算法打卡记录 今日重点算法: 前缀和与二维前缀和应用(土地划分问题) 链表元素删除(虚拟头节点技巧) 哈希表应用(字母异位词、快乐数检测) 主要内容: 使用二维前缀和优化土地划分计算,找到最小价值差 链表删除元素时采用虚拟头节点简化操作 通过哈希表快速判断字母异位词、快乐数等特性 利用双指针和哈希表解决两数之和问题 典型问题: 卡码网44题(二维前缀和) 力扣203题(链表操作) 力扣242/349题(哈希表应用) 力扣202题(数学+哈希)
2026-03-12 21:04:22
410
原创 【算法打卡day19(2026-03-11 周三)算法:打家劫舍-DP,双指针,二分查找,滑动窗口,方向控制,前缀和 】8个题
本文记录了2026年3月11日的算法打卡内容,主要涉及二分查找、双指针、滑动窗口、动态规划等算法。包含力扣704(二分查找)、27(移除元素)、977(有序数组平方)、209(最小子数组)、198/213(打家劫舍系列)、59(螺旋矩阵)及卡网58(区间和)共8道题目。重点展示了双指针法移除元素和二分查找的实现代码,并提供了暴力解法和优化解法的对比分析。所有题目均来自"代码随想录"刷题计划,涵盖了基础算法和常见解题思路。
2026-03-11 20:50:18
392
原创 【算法打卡day18(2026-03-10 周二)DP - 完全背包问题】 7-力扣139-单词拆分 蓝桥云课303-求解01背包问题 蓝桥云课304-求解完全背包问题
摘要 本文记录了作者在2026年3月10日学习动态规划和背包问题的过程。主要内容包括: 力扣139题-单词拆分:使用动态规划解决字符串能否由字典单词拼接的问题。作者详细分析了递推条件、分割点位置等关键点,指出需要判断是否存在分割点j使得s[0:j)可拆分且s[j:i)在字典中。 01背包问题:介绍了背包容量限制下价值最大化的解法,包括状态转移方程和回溯法。当背包容量不足时保持前i-1个物品的价值;容量足够时比较装入和不装入两种情况取最大值。 作者表示单词拆分题难度较高,花费2小时理解,后续需要复习巩固。同时
2026-03-10 20:34:02
312
原创 【算法打卡day17(2026-03-09 周一)DP - 完全背包问题】4-卡码网57-爬楼梯(进阶版) 5-力扣322-零钱兑换 6-力扣279-完全平方数
本文总结了三个动态规划问题:爬楼梯进阶版、零钱兑换和完全平方数。 爬楼梯进阶版:将问题转化为完全背包问题,背包容量为楼梯阶数n,物品为每次可爬的1~m阶台阶。使用一维DP数组计算排列数,先遍历背包再遍历物品。 零钱兑换:目标是凑出总金额的最少硬币数。DP数组初始化为最大值,遍历背包和物品,更新最小硬币数。若无法凑出金额,返回-1。 完全平方数:求凑出整数n所需的最少完全平方数数量。物品为完全平方数,遍历背包和物品,动态更新最小数量。 这些问题均通过完全背包的一维DP解决,核心在于状态转移和初始条件处理。
2026-03-09 21:08:33
360
原创 如何判断某题是否使用【完全背包】去做
摘要: 本文记录了作者在解决力扣322题(零钱兑换)时,对如何判断是否使用完全背包算法的思考过程。通过与AI的对话,作者总结了识别完全背包问题的关键要素: 背包容量对应目标整数n; 物品为完全平方数(1,4,9,…); 物品重量即其数值; 物品价值为1(统计数量); DP数组dp[i]表示凑出总和i所需的最少完全平方数个数; 物品可无限使用,符合完全背包特性。 最终通过代码实现(C++)验证了思路的正确性,并提供了通用的判断流程,帮助识别类似问题是否适用完全背包解法。
2026-03-09 19:50:19
567
原创 思考:完全背包-为什么先遍历背包再遍历物品是“排列数”,先遍历物品再遍历背包是“组合数”
摘要: 文章探讨了动态规划中完全背包问题的遍历顺序对结果的影响。通过分析代码执行过程,指出先遍历背包容量(外循环)再遍历物品(内循环)会产生排列数,因为每个容量会考虑所有可能的最后一步;而先遍历物品再遍历容量则固定物品顺序,仅生成组合数。作者反思了理解模糊的原因在于缺乏对状态转移具象化的分析,并提出通过手动模拟小例子、理解状态转移含义来强化认知。核心结论是:遍历顺序决定了“最后一步”的选择自由度,从而影响结果的排列/组合性质。(150字)
2026-03-07 18:08:22
558
原创 【动态规划DP】完全背包-理论基础
本文对比了01背包和完全背包的动态规划解法。01背包每个物品只能使用一次,需倒序遍历容量;完全背包物品可重复使用,需正序遍历。完全背包的遍历顺序可以互换(先物品或先容量),但01背包不可互换。通过代码示例和DP数组变化过程,展示了两种背包问题的具体实现差异,并解答了完全背包如何实现多种物品组合的疑问。核心区别在于遍历顺序和物品使用次数的处理方式。
2026-03-06 22:15:48
395
原创 完全背包-求排列数和组合数(为什么先遍历背包再遍历物品求的是 **排列数**,先遍历物品再遍历背包求出的是 **组合数**)
完全背包问题中遍历顺序的不同会导致求得排列数或组合数的差异。关键区别在于状态更新的顺序: 求组合数:外层遍历物品,内层遍历背包。这种方式固定了物品顺序,确保相同元素的不同排列不会被重复计算。例如计算金额3时,只会出现[1,2]而不会出现[2,1]。 求排列数:外层遍历背包,内层遍历物品。这种方式允许以任意物品作为最后一步,从而包含所有可能的排列顺序。计算金额3时,会同时包含[1,2]和[2,1]。 这种差异源于动态规划状态更新的顺序:物品优先遍历限制了"最后一步"的选择范围,而背包优先遍
2026-03-06 22:09:54
317
原创 【算法打卡day16(2026-03-06 周五)DP - 完全背包问题】2-力扣518-零钱兑换II 3-力扣377-组合总和 Ⅳ
本文记录了作者在2026年3月6日对两道力扣完全背包问题的解题过程。首先分析了518题(零钱兑换II)的组合数问题,解释了动态规划中dp[j] += dp[j-coins[i]]的含义,强调了初始条件dp[0]=1的重要性,并指出需要使用unsigned long long存储数据。随后在377题(组合总和IV)中,通过调换遍历顺序(先背包后物品)解决排列数问题。两题均采用一维DP实现完全背包解法,核心区别在于遍历顺序决定结果性质(组合/排列)。作者详细阐述了两种遍历顺序导致不同结果的原因,并提供了完整的C
2026-03-06 22:07:45
231
原创 【算法打卡day15(2026-03-03 周一)DP - 01背包问题】5-力扣474-一和零
本文介绍了力扣第474题"一和零"的动态规划解法。该问题被转化为二维费用的01背包问题,其中每个二进制字符串被视为具有0和1数量两个维度的"物品"。通过构建二维数组dp[i][j]表示最多使用i个0和j个1时的最大子集大小,采用倒序遍历的方式确保每个字符串只被考虑一次。最终dp[m][n]即为答案,时间复杂度为O(strs.lengthmn)。
2026-03-03 21:53:40
306
原创 【算法打卡day14(2026-03-02 周一)DP - 01背包问题】3-力扣1049最后一块石头的重量II 4-力扣494目标和
本文探讨了如何将"最后一块石头的重量II"问题转化为01背包问题。通过分析石头碰撞过程,发现最终剩余重量可表示为两个石头子集重量之差的绝对值。关键在于找到最接近总重量一半的子集和,这等价于01背包问题。解决方案是计算总重量后,以sum/2为背包容量进行动态规划,最终结果为总重量减去两倍的最大子集和。该算法通过巧妙的问题转化,将看似复杂的碰撞问题简化为经典的背包问题求解。
2026-03-02 21:22:48
674
原创 【算法打卡day13(2026-03-01 周日)DP - 01背包问题】 2-力扣416-分割等和子集
本文探讨了如何利用动态规划解决力扣416题"分割等和子集"问题。该问题要求判断给定的正整数数组能否被分割成两个和相等的子集。解题思路是将问题转化为01背包问题:计算数组总和的一半作为目标值,在数组中找到若干元素使其和等于该目标值。具体实现时,先排除总和为奇数的情况,然后使用动态规划数组记录各容量下的最大价值,通过逆序遍历确保每个元素只使用一次。若某个容量下的价值等于目标值,则返回true。最终代码展示了这一过程,时间复杂度为O(n*target)。
2026-03-01 21:35:55
180
原创 【算法打卡day12(2026-02-28 周六)01背包基础理论】
本文介绍了01背包问题的理论基础及两种动态规划解法。01背包是背包问题的基础,要求每个物品只能选0或1次。文章首先解释了三种背包类型(01、完全、多重)的区别,然后重点讲解01背包的二维DP解法,通过状态转移方程dp[i][j]表示前i个物品在容量j下的最大价值,并详细分析了物品索引与数组下标的对应关系。最后介绍了优化后的一维DP解法,强调必须逆序遍历背包容量以避免重复计算。文章通过示例代码和分步解释,帮助读者理解01背包的核心思想和实现细节。
2026-02-28 22:33:26
930
1
原创 【算法打卡day11(2026-02-26 周四)动态规划DP 6道 基础题】
本文记录了2026年2月26日的算法打卡内容,包含5道动态规划问题的解题思路和代码实现: 斐波那契数(力扣509):使用动态规划代替递归,时间复杂度优化为O(n) 爬楼梯问题(力扣70):将问题转化为斐波那契数列求解,提供两种实现方式 最小花费爬楼梯(力扣746):计算到达楼顶的最小花费,考虑两种移动方式 不同路径(力扣62):网格路径计数问题,通过初始化边界和递推公式求解 不同路径II(力扣63):在网格路径问题基础上增加障碍物条件处理 所有解法都遵循动态规划的基本思想,通过定义状态、初始化边界、建立递推
2026-02-26 23:06:52
401
原创 【算法打卡day10(2026-02-24 周二)动态规划DP基础理论】
摘要:动态规划(DP)基础理论与五部曲 本文回顾了动态规划(DP)的基础理论,强调其常见考点(背包问题、打家劫舍、股票问题、子序列问题)并系统介绍了DP五部曲: 明确DP数组及下标含义——核心步骤; 推导递推公式; 初始化DP数组; 确定遍历顺序(如背包问题中物品与背包的遍历顺序); 打印DP数组以调试代码。 通过结构化方法避免“黑盒”状态,提升解题效率。 (字数:150)
2026-02-24 22:05:47
173
原创 【算法打卡day10(2026-02-24 周二)复习算法:DFS BFS 并查集】
本文总结了图论中DFS和BFS算法的应用,包含三个代码示例:1)使用DFS查找图中所有可达路径;2)通过BFS/DFS计算孤岛数量;3)用DFS/BFS求最大岛屿面积。所有代码均采用邻接矩阵或二维数组存储图结构,并实现了路径回溯、访问标记等关键操作。DFS采用递归实现,BFS借助队列遍历,两者都通过四方向移动处理网格问题。代码展示了如何用这两种算法解决路径搜索、连通分量计数和区域面积计算等典型图论问题。
2026-02-24 19:55:35
283
1
原创 【算法打卡day9(2026-02-14 周六)算法:并查集】 4-卡码网108-冗余连接
摘要: 题目描述了一棵树在添加一条边后形成环图,要求找出并删除冗余边使其恢复为树。使用并查集算法,通过检查边的两个节点是否已连通(根节点相同)来判断冗余边。若连通则输出该边(优先输出最后出现的边),否则合并节点集合。代码实现了并查集的初始化、查找(含路径压缩)和合并操作,遍历输入边时实时检测冗余情况并输出结果。时间复杂度接近线性,适用于N≤1000的数据规模
2026-02-14 23:32:41
243
原创 【算法打卡day8(2026-02-13 周五)算法:并查集】 3_卡码网107_寻找存在的路线_并查集
摘要: 本文介绍了使用并查集算法判断无向图中两个节点是否存在路径的问题。题目给定节点和边的信息,要求判断从起点到终点是否存在路径。并查集通过将连通的节点合并到同一集合,最终检查起点和终点是否属于同一集合来判定连通性。相比BFS/DFS,并查集在无向图中更简洁高效。代码实现包括初始化、查找根节点、合并集合及连通性判断,时间复杂度接近O(1)。示例输入输出验证了算法的正确性,适用于节点数≤100的规模。
2026-02-13 23:29:28
361
原创 【图论 - 并查集】基础 + 模板代码
本文介绍了并查集的基本概念和实现方法。并查集用于快速判断元素是否属于同一集合,支持合并和查询操作。文章给出普通并查集的C++实现,包含初始化、查找、合并和判断函数。重点讲解了优化方法——路径压缩,通过修改find函数让所有节点直接指向根节点,减少递归深度。优化后的并查集查询效率更高,适合处理大规模数据。
2026-02-13 23:26:08
325
原创 【算法打卡day7(2026-02-12 周四)算法:BFS and BFS】10__卡码网110_字符串迁移, 11_卡码网105_有向图的完全连通
摘要 本文包含两个算法题解: 字符串迁移问题:使用BFS寻找从起始字符串到目标字符串的最短转换路径,每次只能改变一个字符且中间字符串必须在给定字典中。通过队列和哈希表实现BFS遍历,确保找到最短路径。 有向图完全连通问题:通过DFS检查从节点1出发是否能访问所有其他节点。使用邻接表存储图结构,DFS遍历后验证所有节点是否被访问,判断图的连通性。 两题均采用图遍历思想(BFS/DFS),分别解决了字符串转换最短路径和图连通性问题。
2026-02-12 21:03:43
1240
2
原创 【算法打卡day6 | 2026-02-11 周三 | 算法: BFS and BFS】| 8_卡码网104_建造最大岛屿 | 9_卡码网106_海岸线计算
摘要 本文解决了一个关于最大岛屿面积的问题。给定一个由0和1组成的矩阵,通过将一格0变为1,求操作后可能形成的最大岛屿面积。算法分为两步:首先使用DFS/BFS遍历所有岛屿,为每个岛屿编号并计算面积;然后遍历所有海洋点,计算将其变为陆地后能连接周围不同岛屿形成的总面积,取最大值。文章详细描述了DFS/BFS的实现过程,并处理了全陆地等特殊情况,最终输出可能的最大岛屿面积。
2026-02-11 17:43:14
141
原创 【算法打卡day5 | 2026-02-10 周二 | 算法: BFS and BFS】7_卡码网103_高山流水
本文介绍了一个矩阵边界可达性问题的算法解决方案。题目给定一个N×M矩阵表示地形高度,要求找出所有既能到达第一组边界(左、上)又能到达第二组边界(右、下)的单元格。作者采用逆向思维,使用BFS从边界向中间搜索,标记能到达第一组和第二组边界的单元格,最后输出同时满足两个条件的坐标。代码实现了BFS算法,并处理了矩阵边界条件,最终输出符合条件的单元格坐标。该解法通过两次边界搜索和结果交集判断,高效地解决了问题。
2026-02-10 23:11:50
156
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅