
编程算法提高(c++)
文章平均质量分 70
欢迎来到个人算法提高专栏!本专栏旨在帮助算法爱好者提升算法与数据结构方面的知识与技能。通过涵盖基础到高级的算法理论、经典问题解析、编程技巧分享以及实战案例分析,我们致力于为读者提供系统化的学习路径。同时,专栏还将分享最新的算法研究动态和竞赛题解,帮助读者在实际应用中灵活运用所学知识。
小王Jacky
计算机新手
展开
-
蓝桥301实现基数排序
代码优势正确性:通过字符串处理简化了按位操作,稳定分桶确保排序正确。鲁棒性:处理全零情况和前导零的去除逻辑完善。潜在限制仅限非负整数:未处理负数,但题目未要求。字符串转换开销:对极大整数可能影响性能,但符合题目约束。适用场景整数位数差异较小的数据集。需要稳定排序且数值范围可控的场景。原创 2025-03-28 13:51:13 · 382 阅读 · 0 评论 -
蓝桥1216走迷宫
代码潜在问题数组越界a和v的大小仅为100x100,当输入n或m超过 99 时越界。步数计算错误:起点步数初始化为0,导致输出比实际格子数少 1(例如起点到终点需8格子,代码输出7边界检查缺失:未验证tx和ty是否在[1, n]和[1, m]范围内,可能导致越界访问。障碍物检查缺失:未提前检查起点/终点是否为障碍物,可能错误处理。改进建议将数组大小改为避免越界。起点步数初始化为1,或在输出时+1。添加tx和ty的范围检查。适用场景小规模迷宫(原创 2025-03-23 20:53:23 · 296 阅读 · 0 评论 -
蓝桥782拼数
代码优势正确性:直接比较拼接后的结果,避免循环比较可能导致的错误。简洁性:逻辑清晰,代码量少,易于维护。潜在注意点全零处理:若所有输入为0,应避免输出多个前导零(题目数据保证正整数,无需处理)。适用场景需要将数字拼接成最大数的场景,如生成交易编号、资源排序等。原创 2025-03-23 19:40:55 · 227 阅读 · 0 评论 -
洛谷P3613 【深基15.例2】寄包柜
代码优势稀疏存储:仅存储实际使用的柜子和格子,节省内存。极简逻辑:直接利用哈希表特性实现存取操作,代码量仅 20 行。潜在注意点哈希冲突:极端情况下时间复杂度可能退化,但概率极低。输入保证:题目保证查询操作对应的格子一定存在,无需判空处理。适用场景需要动态管理稀疏矩阵的场景(如在线游戏道具背包)。处理海量随机存取请求的高性能场景。原创 2025-03-23 17:58:18 · 366 阅读 · 0 评论 -
洛谷P3156 【深基15.例1】询问学号
代码优点高效查询:直接通过索引访问数组元素,时间复杂度极低。简洁性:逻辑直接,无需复杂数据结构或算法。潜在注意点索引转换:题目输入从 1 开始,代码通过ask-1转换为从 0 开始的索引。边界检查:代码未显式检查ask是否越界(题目隐含保证输入合法)。适用场景需要快速响应大量查询的学号检索任务。输入规模较大时仍保持高效(如 n,m≤106)。原创 2025-03-23 16:54:54 · 284 阅读 · 0 评论 -
图的bfs遍历(邻接表bfs)
代码优势邻接表节省空间,适合稀疏图。BFS逻辑清晰,严格按层遍历。潜在问题内存泄漏:动态分配的ArcNode未释放(需补充delete有向图限制:示例中边为单向插入,若需无向图需双向插入(如0→1和1→0静态数组限制:队列大小固定为MAXSIZE,可能溢出。改进方向使用C++标准库队列(如queue<int>)避免手动管理队列。添加边的双向插入支持无向图。释放动态分配的内存。原创 2025-03-22 14:13:52 · 465 阅读 · 0 评论 -
图的bfs遍历(邻接矩阵bfs)
代码优势结构清晰,邻接矩阵直观表示图的连接关系。严格按BFS算法实现,逐层遍历无遗漏。潜在问题仅限无向图:输入边时双向设置邻接矩阵,若为有向图需修改。固定顶点数:顶点数固定为5,无法动态扩展。无错误检查:未验证输入的顶点是否合法(如字符超出A-E)。改进方向支持动态顶点数量输入。添加有向图/无向图选项,避免错误设置边。增加输入顶点合法性的校验。原创 2025-03-22 14:01:50 · 382 阅读 · 0 评论 -
卡码网98. 所有可达路径(邻接表dfs)
环路风险未检查节点是否重复访问,若图中有环(如1→2→1),会导致无限递归。改进方向:添加visited数组标记已访问节点,或在递归前检查当前路径是否包含该节点。代码优势邻接表节省空间:适合稀疏图(边数远少于节点数的平方)。DFS逻辑清晰:直接遍历邻接节点,避免冗余循环。输出修复初始版本输出循环的起始索引为1(导致漏掉起点1),现已修正为i=0,确保路径完整。适用性适合小规模图,但无法处理大规模图(路径数指数增长)。若题目允许重复节点,需明确说明;否则需添加环路检查。原创 2025-03-22 12:29:38 · 310 阅读 · 0 评论 -
卡码网98. 所有可达路径(邻接矩阵dfs)
代码优势实现简单,直接通过邻接矩阵和DFS遍历所有路径。回溯机制清晰,路径记录完整。潜在问题环路处理:未检查重复访问节点,若图中有环会导致无限递归(例如1→2→1循环)。性能问题:路径数量可能随节点数呈指数增长,无法处理较大规模的图。改进方向添加访问标记:引入visited数组或检查当前路径是否包含节点,避免重复访问。限制路径长度:若题目要求简单路径(无重复节点),需在递归前检查节点是否已存在路径中。原创 2025-03-22 10:50:32 · 328 阅读 · 0 评论 -
蓝桥252查找两个总和为特定值的索引
代码优势简单直观,直接遍历所有可能的组合。输出时强制升序,符合题目要求。潜在问题重复检查i和j会被检查两次(如(1,4)和(4,1)),但通过立即返回避免重复输出。相同索引问题:若,会输出i和i(如[3, 3],目标值6),但题目未明确禁止此情况。适用场景:在题目保证存在唯一解且允许重复索引时正确。若需严格不同索引,需额外判断i!= j。原创 2025-03-21 14:21:28 · 349 阅读 · 0 评论 -
蓝桥251找到给定字符串中的不同字符
代码优势哈希表统计频率,逻辑简单。线性时间复杂度,高效处理。潜在问题覆盖赋值:若存在多个字符满足条件,最后一次遍历的字符会覆盖正确答案。假设唯一差异:代码假设输入合法(仅一个字符差异),但未验证输入是否合法。适用场景:仅在题目严格保证唯一差异时正确,其他场景可能输出错误结果。原创 2025-03-21 14:01:00 · 352 阅读 · 0 评论 -
蓝桥250反转字符串中的字符
代码优势使用双指针高效实现字符串和数组的反转。逻辑清晰,符合题目要求的操作顺序。潜在问题末尾空格:输出时每个单词后追加空格,可能导致末尾多出一个空格(如输入"hello"→ 输出"olleh "空输入处理:若输入为空字符串,程序会输出一个空格。原创 2025-03-21 13:39:19 · 142 阅读 · 0 评论 -
蓝桥205反转字符串中的字符
代码优势使用双指针高效实现字符串和数组的反转。逻辑清晰,符合题目要求的操作顺序。潜在问题末尾空格:输出时每个单词后追加空格,可能导致末尾多出一个空格(如输入"hello"→ 输出"olleh "空输入处理:若输入为空字符串,程序会输出一个空格。原创 2025-03-21 13:36:23 · 355 阅读 · 0 评论 -
蓝桥204压缩字符串
代码优势单次遍历实现压缩,时间复杂度低。逻辑简洁,直接生成压缩字符串。潜在问题越界风险:内部循环的条件顺序错误,应先检查索引是否越界(即在前)。当前顺序可能导致访问时越界。改进建议调整内部循环条件为,避免越界。用户要求:保持代码不变,因此未直接修改代码逻辑。原创 2025-03-21 13:02:58 · 369 阅读 · 0 评论 -
蓝桥203确定字符串是否是另一个的排列
原代码问题仅验证字符存在性,未检查数量是否一致。未处理字符串长度不同的边界情况。双重循环导致高时间复杂度。改进方向长度校验:直接排除长度不同的输入。哈希表统计:精确比较字符频率。高效实现:使用哈希表或固定数组优化时间和空间复杂度。原创 2025-03-20 14:35:09 · 161 阅读 · 0 评论 -
蓝桥202确定字符串是否包含唯一字符
代码优点高效性:实时检测重复字符,提前终止遍历,节省时间。大小写处理:通过tolower统一字符大小写,符合题目要求。鲁棒性:正确处理空字符串、含空格字符串及各类字符。适用场景需要快速判断字符串中是否存在重复字符(不区分大小写)的场景。适用于输入规模较大的情况,时间复杂度严格线性。原创 2025-03-20 14:21:57 · 273 阅读 · 0 评论 -
卡码网6. A+B问题VIII
代码优点严格按题意控制输出格式,确保每组用例结果间用空行分隔。逻辑清晰,可处理任意规模的输入数据。潜在改进点空间优化:无需存储所有整数,直接读取时累加,将空间复杂度降至 O(1)。输入效率:若数据量极大,可用scanf替代cin提升读取速度。适用场景:需要按组处理多测试用例并控制输出格式的场景,完全符合题目要求。原创 2025-03-20 14:01:47 · 319 阅读 · 0 评论 -
卡码网5. A+B问题VII
代码优点简洁直观,直接满足题目要求的输出格式(每个结果后跟空行)。循环逻辑清晰,适用于多组输入处理。潜在改进点输出格式:若题目要求每组结果仅用一个空行分隔,且最后一行后无需空行,当前代码可能在输出末尾多出一个空行。效率优化:若输入规模极大,可合并输出操作(如),但逻辑不变。适用场景:严格按题目要求输出结果和空行的场景。原创 2025-03-20 13:51:44 · 226 阅读 · 0 评论 -
卡码网4. A+B问题IV
代码优点逻辑清晰,直接按题意实现,易于理解。动态数组自动管理内存,避免内存泄漏。潜在改进点空间优化int num;cin >> num;ans += num;),将空间复杂度降至 O(1)。适用场景输入规模中等时表现良好,若数据量极大(如 n≤106),直接累加方式更优。原创 2025-03-20 13:45:24 · 359 阅读 · 0 评论 -
卡码网3. A+B问题III
代码优点简洁高效,直接根据终止条件控制循环。内存占用极低,适用于流式输入处理。潜在改进点若输入规模极大(如百万级),cin可能较慢,可改用scanf优化输入速度(但逻辑不变)。适用场景:需要以特定输入对(如0 0)终止的多组整数求和场景,完全符合题目要求。原创 2025-03-20 13:36:34 · 373 阅读 · 0 评论 -
卡码网2. A+B问题II
代码优点结构清晰,通过嵌套循环高效处理多组测试用例。内存占用极低,适用于大规模数据输入。潜在改进点若输入数据量极大,cin可能较慢,可改用scanf提升读取速度(但代码逻辑不变)。适用场景:所有需要按组处理多对整数求和的场景,符合题目要求。原创 2025-03-20 13:30:26 · 404 阅读 · 0 评论 -
卡码网1. A+B问题I
代码优点简洁高效,直接处理输入输出,无冗余操作。适用于任意数量的测试用例,内存占用极低。潜在改进点若输入规模极大(如百万级),cin可能较慢,可改用scanf优化(但代码逻辑不变)。适用场景:所有需要多组整数对求和的场景,符合题目要求。原创 2025-03-20 13:23:50 · 296 阅读 · 0 评论 -
卡码网50. 随机数排序(第七期模拟笔试)
优点哈希表高效去重,排序逻辑简洁。代码可读性强,适用于常规数据规模。缺点哈希表内存占用较高(相比位图法)。改进点若输入范围有限(如数字较小),可用数组替代哈希表优化空间。直接使用set自动排序(但插入时间 O(logm) 可能更慢)。原创 2025-03-20 12:54:59 · 310 阅读 · 0 评论 -
卡码网35. 打印二维数组(第三期模拟笔试)
代码优点严格按斜线层填充,逻辑清晰。通过数学推导确保行列不越界,正确性有保障。潜在改进点空间优化:可直接输出结果,无需存储整个矩阵(但需处理顺序)。适用场景:中等规模的矩阵填充(题目限制下效率足够)。原创 2025-03-20 12:42:09 · 323 阅读 · 0 评论 -
洛谷P1201 [USACO1.1] 贪婪的送礼者Greedy Gift Givers
代码优点直接模拟题目规则,逻辑清晰。利用pair结构存储数据,便于查找和更新。潜在问题查找效率低:每次查找人名需要遍历数组,可用哈希表优化至 O(1)。未处理余数:题目未明确余数处理(如,总送出33 * 3=99,余数 1 未扣除)。输入假设:假设输入的接收者名字一定存在。适用场景:小规模数据(题目限制通常为n ≤ 10),效率可接受。原创 2025-03-19 14:54:14 · 428 阅读 · 0 评论 -
洛谷P1181 数列分段 Section I
代码优点贪心策略直观高效,时间复杂度为线性。变量命名清晰,逻辑简单。潜在问题单个元素超过m:若某个元素本身大于m,内层循环会直接跳过,导致分段逻辑错误(如输入[7]m=6,代码会进入死循环)。函数参数传递应改为引用传递()以避免拷贝开销。改进建议增加对单个元素超过m的特殊处理(题目隐含保证所有元素 ≤m优化参数传递方式。原创 2025-03-19 13:22:22 · 342 阅读 · 0 评论 -
洛谷P1147 连续自然数和
代码问题漏解问题:循环从 k=2 开始,导致 k=1 的合法解(如 [M,M])未被包含。冗余代码:前缀和数组preSum被构建但未使用,增加内存消耗。改进建议修正循环范围:将...改为...。删除冗余代码:移除preSum相关逻辑以优化空间。潜在影响当 M 是质数或大数时,遗漏 k=1 的解会导致答案错误。例如:M=1000003 的解应包含 [1000003,1000003],但代码不会输出。原创 2025-03-18 15:50:15 · 365 阅读 · 0 评论 -
洛谷P1125 [NOIP 2008 提高组] 笨小猴
代码特点简洁性:直接利用哈希表统计频率,逻辑清晰。效率:质数判断优化到 O(√ans),适用于常规输入。潜在问题极值初始化风险minn初始值设为 100,若所有字符出现次数均 ≥100(如超长字符串),会得到错误结果。字符范围限制:仅支持 ASCII 字符,但对题目要求足够。改进建议将minn初始化为INT_MAX或第一个字符的出现次数,避免极端情况错误。若题目允许,可用固定大小数组(长度 26)代替哈希表,优化空间。原创 2025-03-18 14:29:27 · 361 阅读 · 0 评论 -
洛谷P1115 最大子段和
代码特点动态规划经典实现:逻辑清晰,直接反映问题的最优子结构。正确处理边界:如全负数数组(输出最大单元素值)。潜在问题空间冗余:若数组长度极大,dp数组可能占用较多内存,可优化为仅保存前一个状态。适用场景实时数据流处理(逐个元素处理)。对时间复杂度要求严格的场景(如数据量百万级)。原创 2025-03-18 13:51:55 · 403 阅读 · 0 评论 -
洛谷P1449 后缀表达式
代码特点高效统计的插入和查询操作平均时间复杂度为 O(1)。灵活排序:通过vector的排序功能实现结果有序输出。潜在注意点输入顺序无关性:哈希表本身无序,需依赖排序保证输出顺序。数字范围限制:若数字范围极大(如超过1e9),哈希表仍能正常工作,但空间可能增加。适用场景数据量大且无需预先排序的场景(如随机输入)。对时间复杂度要求较高的统计问题。原创 2025-03-18 13:25:17 · 580 阅读 · 0 评论 -
洛谷P1308 [NOIP 2011 普及组] 统计单词数
代码特点通过预处理统一大小写,简化匹配逻辑。精确分割单词并记录位置,符合题目要求。潜在问题标点符号处理:如单词含非字母字符(如"hello!),会被视为合法单词,可能与题目隐含的输入格式假设冲突。位置计算:起始位置从 0 开始,符合题目示例要求。适用场景输入严格符合“单词由空格分隔”的格式时,代码正确性可保证。处理大规模数据时,线性时间复杂度表现良好。原创 2025-03-18 12:12:30 · 497 阅读 · 0 评论 -
洛谷B3702 [语言月赛202301] 华小科的旅行开始了
代码特点直接根据转移规则模拟路径,逻辑简单。通过二维数组快速查询下一步坐标。潜在问题数组越界:若转移后的坐标nextx或nexty超出有效范围(如nextx > n或nexty > m),会导致访问越界。未初始化区域travel数组的第 0 行和第 0 列未填充数据,可能被错误访问。适用场景题目保证转移路径最终指向(0, 0),且不会越界。若数据存在循环或无效坐标,代码可能无法终止或崩溃。原创 2025-03-15 10:59:47 · 403 阅读 · 0 评论 -
洛谷B3672 [语言月赛202210] 图书新编
代码特点直接逻辑实现:通过字符串操作检查后缀匹配,代码简洁。整数转字符串的缺陷:若查询的code包含前导零(如005),输入为整数时会丢失前导零(存储为5),导致匹配失败。潜在问题前导零处理错误:这是代码的核心问题。例如,图书编码为1005,查询num=3code=005,实际code会被存储为5,导致匹配失败。优化建议输入code时应直接读取字符串而非整数,以避免前导零丢失。预处理图书编码为字符串形式,减少重复转换开销。适用场景仅适用于查询的code。原创 2025-03-15 10:26:38 · 516 阅读 · 0 评论 -
洛谷B2105 矩阵乘法
代码特点直接实现公式:严格遵循矩阵乘法的数学定义,逻辑清晰。逐元素计算:通过三重循环显式计算每个结果元素的值。潜在优化循环顺序调整:调整循环顺序(如将最内层循环改为连续内存访问)可能提高缓存效率。并行计算:利用多线程加速三重循环(但需题目允许)。适用场景适用于小规模矩阵计算(如题目中的输入范围)。不适用于大规模稀疏矩阵(需优化存储和计算)。原创 2025-03-14 19:33:24 · 407 阅读 · 0 评论 -
leetcodeLCR 124. 推理二叉树
代码特点哈希表加速:将中序查找的时间复杂度从O(n)优化为O(1)。递归分治:通过递归分割左右子树,逻辑清晰。固定队列:假设节点数较小,使用固定大小数组简化队列实现。潜在优化动态队列:使用std::queue或动态数组避免固定大小限制。迭代替代递归:减少递归栈空间(例如Morris遍历)。适用场景适用于前序和中序序列已知且节点值唯一的场景,如二叉树重建问题。原创 2025-03-14 19:02:56 · 521 阅读 · 0 评论 -
洛谷B2099 矩阵交换行
代码特点直接交换:通过遍历每列元素直接完成行交换,逻辑简单高效。正确处理索引:将用户输入的1基行号转换为0基索引(m-1和n-1潜在优化无需优化,输入规模固定,代码已足够高效。适用场景适用于矩阵行交换问题,尤其是固定规模的矩阵操作。原创 2025-03-14 19:01:17 · 383 阅读 · 0 评论 -
洛谷P1011 [NOIP 1998 提高组] 车站
代码特点通过分离a和b的系数,将问题转化为线性方程求解。特殊处理n=2和x为终点站的情况,避免无效计算。潜在优化可优化空间复杂度,仅保留必要变量而非数组。适用场景适用于车站数较大的场景,但时间复杂度仍为线性,效率较高。原创 2025-03-13 09:52:27 · 349 阅读 · 0 评论 -
卡码网27. 最长增长子序列(第一期模拟笔试)
代码特点实现简单直观,严格遵循动态规划定义。输入解析正确处理了带逗号和方括号的格式。潜在问题对于大规模数据(如n > 1e4),O(n²) 算法会超时(需优化为 O(n log n) 方法)。改进方向使用二分查找优化 LIS 计算(例如维护一个有序数组,记录可能的递增序列尾部元素)。原创 2025-03-12 14:06:52 · 236 阅读 · 0 评论 -
卡码网26. 不相同的字符串(第一期模拟笔试)
代码特点通过哈希表快速统计字符频率,逻辑简单高效。同时考虑重复字符删除和总长度限制两种条件。潜在问题双字符删除逻辑:假设每次操作删除两个字符,但未考虑剩余字符的唯一性可能被破坏。总长度限制处理:直接取原长度 - 26,未结合实际剩余字符数。适用场景适用于允许删除任意字符且操作次数为删除字符数的场景,但需注意题目对操作的明确定义。原创 2025-03-12 11:23:44 · 459 阅读 · 0 评论 -
卡码网25. 最爱的城市
代码特点使用邻接矩阵和 Floyd-Warshall 算法,确保所有节点对的最短路径计算。处理无向图时双向更新边权值。潜在问题City数组大小固定为46,若m > 45会导致数组越界(需确保题目约束)。冗余条件G[i][k]!= INF在无向图中等效于G[i][k]!= INF。改进方向动态调整City数组大小(如移除冗余条件,直接使用进行更新。原创 2025-03-12 10:16:04 · 366 阅读 · 0 评论