- 博客(40)
- 收藏
- 关注
原创 代码随想录一刷记录Day44——leetcode1143.最长公共子序列 53. 最大子序和
本文记录了算法刷题过程中的两题解析:1143.最长公共子序列和53.最大子序和。对于最长公共子序列,采用二维动态规划,通过比较字符是否相同来决定状态转移,最终取矩阵右下角值作为结果。最大子序和则使用一维动态规划,通过比较当前元素与前序和的关系确定局部最大值,遍历过程中维护全局最大值。两题都详细说明了dp数组定义、递推公式、初始化方法和遍历顺序,并提供了对应的C++实现代码。
2026-05-04 23:20:15
357
原创 代码随想录一刷记录Day43——leetcode300.最长递增子序列 674. 最长连续递增序列 leetcode718. 最长重复子数组
本文总结了三个动态规划解决子序列问题的算法题解。300题是最长递增子序列,使用双重循环比较元素并更新dp数组;674题是最长连续递增序列,通过单层循环判断连续递增关系;718题是最长重复子数组,通过二维dp数组记录两个数组的公共子序列长度。三题都采用动态规划思想,通过定义dp数组、确定递推公式和初始化条件来解决问题,最终返回dp数组中的最大值作为结果。这些解法展示了动态规划在子序列问题中的典型应用模式。
2026-04-29 22:51:11
176
原创 代码随想录一刷记录Day42——leetcode188.买卖股票的最佳时机IV
之前就有刷代码随想录,但奈何总是三天打鱼两天晒网,而且刷的也很囫囵吞枣,于是乎决定参加代码随想录训练营,准备精刷一遍,希望自己能坚持下去,结营后自己的算法水平能更上一个level,冲ing!
2026-04-29 22:03:53
220
原创 代码随想录一刷记录Day41——leetcode121. 买卖股票的最佳时机 122.买卖股票的最佳时机II 123.买卖股票的最佳时机III
这篇文章总结了LeetCode上三道股票买卖问题的动态规划解法。121题解决单次买卖问题,使用二维DP数组记录持有/不持有状态;122题允许多次买卖,递推公式调整为考虑之前收益;123题限制最多两次交易,引入五种状态进行转移。三题均采用相似的DP框架,通过状态转移方程计算最大收益,展现了动态规划在股票买卖问题中的通用解法。文章提供了清晰的思路分析和C++实现代码,适合算法学习者参考。
2026-04-27 22:09:49
504
原创 代码随想录一刷记录Day35——01背包问题 二维 01背包问题 一维 01背包问题 一维 leetcode416. 分割等和子集
本文记录了作者参加代码随想录训练营的学习笔记,重点总结了01背包问题的解题思路。内容包含: 二维01背包问题的动态规划解法,包括dp数组定义、递推公式、初始化和遍历顺序; 一维滚动数组优化版本,通过状态压缩降低空间复杂度; LeetCode 416题的背包问题应用,将分割等和子集问题转化为背包问题求解。文章通过具体代码示例展示了如何实现这些算法,并强调了背包问题的核心思想:物品选择和容量限制下的最优解求解。
2026-04-22 22:23:50
173
原创 代码随想录一刷记录Day34——leetcode62.不同路径 63. 不同路径 II
本文记录了作者参加代码随想录训练营的刷题过程,重点分析了LeetCode第62题和第63题的不同路径问题。第62题采用动态规划方法,通过初始化第一行和第一列为1,并使用递推公式dp[i][j]=dp[i-1][j]+dp[i][j-1]求解。第63题在第62题基础上增加了障碍物处理,在初始化时需要遇到障碍即停止赋值,并在递推时跳过障碍点。两题都遵循动规五部曲的分析方法,通过二维dp数组存储中间结果,最终返回终点位置的值。代码实现展示了如何初始化dp数组和处理障碍物情况。
2026-04-21 22:18:34
343
原创 代码随想录一刷记录Day32——leetcode70. 爬楼梯 746. 使用最小花费爬楼梯
本文分享了作者参加代码训练营的初衷,并记录了两道动态规划算法题的解题思路。第一题是爬楼梯问题(LeetCode 70),通过分析楼梯层级关系得出状态转移方程dp[i]=dp[i-1]+dp[i-2],并给出了代码实现。第二题是最小花费爬楼梯问题(LeetCode 746),同样采用动态规划方法,推导出状态转移方程dp[i]=min(dp[i-1]+cost[i-1], dp[i-2]+cost[i-2]),并提供了完整代码。两题都遵循动态规划五部曲进行分析,展现了动态规划在解决递推问题中的应用。
2026-04-20 21:38:33
235
原创 代码随想录一刷记录Day31——leetcode56. 合并区间 738.单调递增的数字
本文分享了两道LeetCode题解:合并区间和单调递增数字。对于合并区间问题,通过排序后逐个比较区间边界,将有重叠的区间合并更新右边界。对于单调递增数字问题,从后向前遍历数字字符串,遇到递减情况则前一位减1并标记后续位为9。两题都采用了贪心算法的思路,分别通过排序和反向遍历的方式高效解决问题。代码实现简洁清晰,体现了对问题本质的把握和算法思想的灵活运用。
2026-04-18 16:29:04
226
原创 代码随想录一刷记录Day30——leetcode452. 用最少数量的箭引爆气球 435. 无重叠区间 763.划分字母区间
本文分享了三个区间问题的解题思路与代码实现: 452题用最少箭引爆气球:通过排序后贪心算法,统计重叠区间数量,每次更新最小右边界 435题无重叠区间:与452题类似,统计需要移除的区间数,同样采用排序后更新右边界的方法 763题划分字母区间:记录字母最后出现位置,遍历时更新最远边界,当当前位置等于最远边界时分割区间 三题都采用贪心思想,通过排序和边界处理解决区间重叠问题,代码实现简洁高效。
2026-04-17 22:24:21
156
原创 代码随想录一刷记录Day29——leetcode134. 加油站 135. 分发糖果 860.柠檬水找零
文章摘要:本文分享了作者参加代码随想录训练营的决心,并记录了三个贪心算法题目的解题思路。对于加油站问题,通过比较总油量和消耗量确定可行起点;分发糖果问题采用两次遍历策略,分别处理左右评分关系;柠檬水找零问题则根据面额优先使用10美元找零。每个问题都通过局部最优推导全局最优,体现了贪心算法的核心思想,并附有清晰的代码实现。
2026-04-15 21:48:36
204
原创 代码随想录一刷记录Day28——leetcode122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II
本文分享了三个LeetCode贪心算法题解:122.买卖股票最佳时机II、55.跳跃游戏和45.跳跃游戏II。对于股票问题,通过分解每日利润实现全局最优;跳跃游戏则关注覆盖范围而非具体步数,通过维护当前和下一步最大覆盖范围来判断可达性并计算最小步数。代码实现简洁高效,体现了贪心算法的核心思想——局部最优解导向全局最优解。
2026-04-14 22:43:59
216
原创 代码随想录一刷记录Day27——leetcode455.分发饼干 376. 摆动序列 53. 最大子序和
本文记录了代码随想录训练营的学习笔记,重点讲解了三个贪心算法相关的LeetCode题目解法。首先是455题分发饼干问题,通过排序后优先满足大胃口孩子来实现最优分配;其次是376题摆动序列,通过保留峰值点来获得最长摆动子序列;最后是53题最大子序和,采用局部最优策略(遇到负和就重置)来寻找全局最大连续子数组和。这些题目展示了贪心算法"局部最优推导全局最优"的核心思想,并通过代码实现演示了如何将这一思想转化为具体解决方案。
2026-04-13 21:57:20
206
原创 代码随想录一刷记录Day25——leetcode491.递增子序列 46.全排列 47.全排列 II
本文记录了算法训练中的三道回溯题目解题思路和代码实现。首先分析了leetcode491递增子序列问题,指出其与子集II的区别在于不能排序且使用set去重。接着讲解了leetcode46全排列问题,强调排列问题需要从头搜索并使用used数组记录元素使用情况。最后解决leetcode47全排列II问题,通过排序和used数组实现树层去重和树枝避免重复使用。三题均采用回溯模板,通过调整去重方式和搜索起点来适应不同需求。完整代码展示了回溯算法的具体实现过程。
2026-04-11 22:14:25
213
原创 代码随想录一刷记录Day24——leetcode93.复原IP地址 78.子集 90.子集II
本文总结了回溯算法在解决IP地址复原和子集问题中的应用。对于复原IP地址问题,通过递归和回溯判断字符串分段合法性,使用pointNum记录分隔符数量。子集问题则需要在每个节点收集结果,与组合问题的区别在于结果收集时机。针对含重复元素的子集问题,通过排序和used数组实现树层去重。文中提供了详细的思路分析和对应的C++代码实现,展示了回溯算法在不同场景下的灵活应用。
2026-04-10 21:18:46
322
原创 代码随想录一刷记录Day23——leetcode39. 组合总和 40. 组合总和II 131. 分割回文串
本文记录了作者参加代码随想录训练营的刷题笔记,主要包含三道回溯算法题目: leetcode39 组合总和:允许重复使用元素,通过控制startIndex实现重复选取,并介绍了剪枝优化方法; leetcode40 组合总和II:元素有重复且不可重复使用,重点讲解使用used数组进行树层去重的方法; leetcode131 分割回文串:将字符串分割为回文子串,类比组合问题的解法,通过startIndex控制分割位置。 每道题都详细分析了思路,给出了关键代码实现,并强调了回溯算法的核心要点和不同题目间的区别。
2026-04-09 22:18:21
384
原创 代码随想录一刷记录Day22——leetcode77. 组合 216.组合总和III 17.电话号码的字母组合
本文总结了使用回溯算法解决组合问题的思路和方法。首先介绍了回溯算法适用于多层嵌套循环问题的特点,通过递归实现循环嵌套。然后详细分析了两道组合问题的解题步骤:77题组合和216题组合总和III,包括递归参数设计、终止条件和单层搜索逻辑,并给出了剪枝优化方案。最后讨论了17题电话号码字母组合与前两题的区别,强调了在不同集合中寻找组合时索引处理的不同。三题均采用相似的回溯框架,通过path记录当前组合,result收集最终结果,展现了回溯算法在组合问题中的通用解法。
2026-04-08 22:23:45
387
原创 代码随想录一刷记录Day17——leetcode654.最大二叉树 617.合并二叉树
文章摘要:本文记录了算法训练中的两道二叉树题目解法。第一题leetcode654通过前序遍历构建最大二叉树,递归寻找数组最大值作为根节点,左右子数组分别构建子树。第二题leetcode617采用前序遍历合并两棵二叉树,当任一节点为空时返回另一节点,否则将节点值相加并递归处理左右子树。两题均采用递归方法,分别展示了二叉树构建和合并的核心思路与实现代码。
2026-04-03 22:14:36
225
原创 代码随想录一刷记录Day15——leetcode110.平衡二叉树 257. 二叉树的所有路径
本文记录了二叉树相关算法的学习笔记,包含四道LeetCode题目解析: 平衡二叉树判断(110题):通过后序遍历递归计算左右子树高度差,若超过1则返回-1表示不平衡。 二叉树所有路径(257题):采用前序遍历和回溯法,当到达叶子节点时记录当前路径。 左叶子节点求和(404题):通过父节点判断左孩子是否为左叶子,使用后序遍历累加左叶子值。 完全二叉树节点计数(222题):提供两种解法,普通二叉树递归法和利用完全二叉树特性的优化方法。 这些题目涵盖了二叉树遍历(前序、后序)、递归和回溯等核心算法思想,适合系统学
2026-04-01 18:47:56
213
原创 代码随想录一刷记录Day13 二叉树的递归遍历、迭代遍历、层序遍历
本文总结了二叉树遍历的递归和迭代实现方法。递归遍历需掌握三要素:参数与返回值、终止条件和单层逻辑。迭代遍历中,前序和后序可通过调整节点处理顺序实现,而中序遍历需特殊处理访问顺序与处理顺序不一致的问题。层序遍历则借助队列,通过记录每层节点数实现分层输出。文中提供了C++代码实现,涵盖前序、中序、后序递归遍历,以及三种迭代遍历和层序遍历的解决方案。
2026-03-31 22:11:57
354
原创 代码随想录一刷记录Day11——leetcode150. 逆波兰表达式求值 239. 滑动窗口最大值 347.前 K 个高频元素
本文记录了作者参加代码训练营的算法刷题笔记,包含三道LeetCode题解:1) 逆波兰表达式求值,使用栈结构处理运算符和数字;2) 滑动窗口最大值,通过自定义单调队列维护窗口内最大值;3) 前K个高频元素(未完成)。作者希望通过系统训练提升算法能力,每道题都给出了详细思路和C++实现代码,展现了栈和队列等数据结构在算法问题中的应用。
2026-03-29 21:48:09
71
原创 代码随想录一刷记录Day10——leetcode232.用栈实现队列 225. 用队列实现栈 20. 有效的括号 1047. 删除字符串中的所有相邻重复项
这篇文章记录了作者参加代码随想录训练营的学习笔记,主要包含四道LeetCode题目的解题思路和代码实现: 用栈实现队列(LeetCode232):使用输入栈和输出栈两个栈来模拟队列操作,重点在于pop时如何将输入栈数据全部导入输出栈。 用队列实现栈(LeetCode225):优化为单队列实现,通过将队首元素(除最后一个)重新入队来实现栈的pop操作。 有效的括号(LeetCode20):利用栈匹配括号,处理三种不匹配情况,并加入字符串长度为奇数的剪枝优化。 删除相邻重复项(LeetCode1047):用栈记
2026-03-27 22:16:38
42
原创 代码随想录一刷记录Day9——leetcode151.翻转字符串里的单词 卡码网55. 右旋字符串
文章摘要: 本文记录了作者参加代码随想录训练营的学习过程,详细讲解了两道字符串处理题目。第一题leetcode151通过"去空格-整体反转-局部反转"三步法翻转字符串中的单词,重点介绍了双指针去空格技巧。第二题卡码网55采用类似思路,通过整体反转加两段局部反转实现字符串右旋。两题均使用了反转函数的灵活应用,展现了分步处理字符串问题的通用解法。作者提供了完整C++代码实现,并配有思路图解,适合算法学习者参考字符串处理技巧。
2026-03-26 21:31:32
194
原创 代码随想录一刷记录Day7——leetcode344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
文章摘要:本文记录了算法刷题笔记,包含三道字符串处理题目。1. 344题实现字符串反转,使用双指针首尾交换;2. 541题按2k间隔反转前k个字符,处理边界条件;3. 卡码网54题将数字替换为"number",采用从后向前填充的双指针法优化时间复杂度。解题思路均围绕字符串操作展开,重点在于掌握双指针技巧和边界条件处理,通过实践提升算法能力。
2026-03-25 16:38:05
271
原创 代码随想录一刷记录Day6——leetcode454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
本文总结了几道LeetCode哈希表和双指针相关的算法题解。454题使用哈希表统计四数相加为0的组合数;383题通过数组哈希判断字符串包含关系;15题采用双指针法解决三数之和问题,并处理去重;18题在15题基础上扩展为四数之和。每道题都详细分析了思路,并提供了C++代码实现,重点讲解了哈希表的使用技巧和双指针的去重方法。
2026-03-25 15:16:08
556
原创 代码随想录一刷记录Day5——leetcode 242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
本文总结了哈希表在算法题目中的应用技巧。通过4道LeetCode题目展示了不同场景下哈希表的选择和使用方法: 有效的字母异位词(242题):使用数组作为哈希表,通过字符映射索引判断字符出现频率 两个数组的交集(349题):使用unordered_set处理无限制数值的去重查询 快乐数(202题):利用unordered_set检测循环出现的求和结果 两数之和(1题):使用unordered_map存储元素及其下标,实现快速查找补数 关键点:数值范围受限时用数组,需要去重用set,需要存储键值对用map。掌握
2026-03-23 16:20:04
503
原创 代码随想录一刷记录Day4——leetcode24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
本文分享了四个链表相关算法题的解题思路和代码实现。1) 两两交换链表节点:通过虚拟头节点和指针交换实现;2) 删除链表倒数第N个节点:使用快慢指针定位删除位置;3) 链表相交问题:两种双指针解法(长度对齐法和交替遍历法);4) 环形链表检测:快慢指针判断环存在并定位入口。文章提供了详细的图示和代码示例,适合算法学习者参考。
2026-03-21 22:22:31
211
原创 代码随想录一刷记录Day3—— leetcode203.移除链表元素 leetcode707.设计链表 leetcode206.反转链表
本文记录了作者参加代码随想录训练营的学习笔记,包含三道链表相关题目的解题思路和代码实现。主要介绍了虚拟头节点的使用技巧、链表基本操作实现以及双指针反转链表的方法。在203题中重点讲解了虚拟头节点简化删除操作的优点;707题详细说明了链表各操作函数中指针定位的注意事项;206题则展示了通过双指针实现链表反转的经典方法。文章体现了作者对链表基础操作的深入理解和实践应用。
2026-03-20 16:38:56
214
原创 代码随想录一刷记录Day1—— leetcode704. 二分查找 leetcode27. 移除元素 leetcode977.有序数组的平方
文章摘要: 本文记录了算法刷题过程中的学习笔记,包含三道LeetCode题目的解题思路和代码实现。704题二分查找强调边界处理的重要性,给出了左闭右闭和左闭右开两种区间写法的代码;27题移除元素对比了暴力法和双指针法,指出快慢指针的核心思想;977题有序数组平方利用双指针法找出最大值。作者通过训练营系统学习算法,注重细节处理(如边界条件、数组越界等),展现了从暴力解法到优化解法的思考过程。每道题都附有完整代码实现,适合算法初学者参考学习。
2026-03-18 22:29:07
218
原创 【动态规划刷题复习】
本文复习了两道经典的动态规划题目:打家劫舍和买卖股票的最佳时机。对于打家劫舍问题,采用动态规划五部曲方法,定义dp[i]为前i个房屋能偷窃的最高金额,递推公式考虑偷或不偷当前房屋的情况。买卖股票问题则定义dp[i][0]和dp[i][1]分别表示第i天持有和不持有股票的最大收益,通过状态转移方程求解。两题都遵循动态规划的基本解题思路,包括确定状态定义、递推公式、初始化、遍历顺序和实例验证,最终给出对应的C++实现代码。
2026-03-15 20:45:24
606
原创 【回溯算法刷题总结之排列问题】
本文针对回溯算法中的排列问题进行分析,通过LeetCode 46(无重复数字全排列)和47(含重复数字全排列)两题进行对比讲解。解题采用回溯三部曲框架:1)定义结果集和路径变量;2)设置递归终止条件(路径长度等于输入数组长度);3)单层搜索逻辑通过used数组标记已选元素。对于含重复数字的情况,需先排序并通过nums[i]==nums[i-1]&&used[i-1]==false条件进行树层去重。两题核心区别在于47题需要额外处理重复元素的剪枝逻辑。
2026-03-14 22:17:36
497
原创 数据结构——查找系列
摘要:本文介绍了三种基于二叉搜索树的查找结构。二叉搜索树(BST)支持O(logn)的查找、插入和删除操作,但在数据有序时会退化为O(n)。平衡二叉树(AVL)通过保持左右子树高度差≤1来优化BST,通过旋转操作维持平衡。红黑树(RBT)则通过颜色标记和特定规则(如红色节点不能相邻)来保证平衡,其最长路径不超过最短路径的两倍。AVL查询效率更高,而RBT在插入删除时更高效。文中详细阐述了各结构的特性、操作规则及调整策略,特别是RBT删除节点时的双黑节点处理机制。
2026-03-14 16:41:37
594
原创 区间DP刷题复习
区间DP:小区间->大区间一般有两类问题:(1)选/不选:如leetcode 516.最长回文子序列问题(2)枚举:如leetcode 1039.多边形三角剖分最低得分问题。
2026-03-13 20:55:49
209
原创 基于STM32的光电开关控制LED应用实践
本文介绍了基于STM32F103C8T6和欧迪龙EK50-DS30D1光电开关的物体检测系统实现方法。通过设计24V-3.3V电平转换电路保护微控制器,配置GPIO输入/输出模式,实现了光电开关检测物体时控制LED亮灭的功能。文章详细说明了硬件连接、软件编程及调试方法,并提供了扩展应用建议。该方案可应用于工业自动化、智能家居等领域,为后续控制更复杂设备(如步进电机)打下基础。
2025-09-10 21:56:26
977
原创 从0到1实现基于C++的小游戏(Man100)
🔥【C++游戏开发实战】详细解释+完整源码!本文详细讲解了如何使用C++和EasyX图形库从零开始开发一个完整的平台跳跃游戏——Man100。包含高性能游戏循环设计、精确碰撞检测算法、面向对象架构设计、内存管理优化等核心技术要点。项目采用组合模式、RAII资源管理等先进设计理念,稳定运行60FPS,内存占用<50MB。无论你是C++初学者还是想要实践游戏开发的进阶者,这都是不可错过的实战教程!⭐完整开源代码已提供,即拿即用!
2025-09-10 20:27:06
944
原创 关于C++中函数内局部变量访问问题
摘要:在使用Sunday算法实现strStr()时,出现局部变量访问错误。问题代码中,nextTable数组在GetNext()函数内部定义,导致strStr()无法访问。提供两种解决方法:1) 将nextTable设为类成员变量,使其在类内共享访问;2) 通过参数传递nextTable数组引用。两种方式均能解决变量作用域问题,确保算法正确执行。
2025-07-09 12:45:04
337
原创 Sunday算法实现中的C++命名冲突问题(避免与STL函数冲突!)
在C++实现Sunday算法时,将数组命名为next会与标准库的std::next()函数冲突导致编译错误。解决方法有两种:1)将数组重命名为更语义化的lastOccurrence;2)使用::next明确指定全局变量,但会降低可读性。建议采用第一种方法,通过合理命名避免冲突并提升代码清晰度。
2025-07-09 12:25:41
269
原创 内存访问错误典型案例:数组越界访问问题
本文记录了在解决LeetCode 27题"移除元素"时遇到的堆缓冲区溢出问题。原始代码使用双循环暴力解法,内层循环存在数组越界访问问题:当j=len-1时,nums[j+1]会越界访问。作者提供两种修复方案:1) 修改内层循环条件为j<len-1;2) 调整数组覆盖逻辑。同时指出该解法时间复杂度为O(n²),推荐更优的双指针解法,时间复杂度可降至O(n)。文章通过具体代码示例,分析了常见的内存访问错误及其解决方法。
2025-06-21 11:12:13
383
原创 RuntimeError: An attempt has been made to start a new process before the current process has finish
在Windows平台进行深度学习训练时,常出现多进程数据加载和主模块保护问题,主要由于Python在Windows和Linux创建多进程逻辑不同。当num_workers>0时,会出现RuntimeError,原因是未正确处理多进程数据加载。解决方案包括:1) 在train.py主模块添加if __name__ == '__main__':保护;2) 临时禁用多进程,将num_workers设为0。此外,如遇GPU内存不足,可降低batch_size。
2025-06-17 22:08:16
823
1
原创 图像处理实践之车牌识别
核心目标从复杂背景中精确定位车牌区域实现倾斜矫正和字符区域提取处理流程fill:#333;color:#333;color:#333;fill:none;原始图像HSV颜色空间转换蓝色区域掩模形态学处理连通域分析倾斜矫正精细定位二值化处理。
2025-04-28 16:07:19
1515
基于C++的Man100小游戏
2025-09-10
图像处理之车牌识别定位
2025-04-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅