- 博客(33)
- 问答 (1)
- 收藏
- 关注
原创 代码随想录算法训练营32天 | 完全背包理论基础、518.零钱兑换II、377. 组合总和 Ⅳ、70. 爬楼梯(进阶版)
本文系统讲解了完全背包问题的动态规划解法,包括理论基础和典型应用。首先介绍了完全背包的二维和一维DP数组解法,重点分析了递推公式、初始化方法和遍历顺序。接着通过三个典型题目(零钱兑换II、组合总和IV、爬楼梯进阶版)展示了完全背包的应用场景,并强调组合问题和排列问题在遍历顺序上的区别。关键点在于理解完全背包与01背包的核心差异(物品无限取用),以及掌握一维DP数组在组合/排列问题中的不同遍历方式(组合问题先物品后背包,排列问题先背包后物品)。
2025-08-29 10:05:32
936
原创 代码随想录算法训练营31天 | 1049.最后一块石头的重量II、494.目标和、474.一和零
本文总结了三道动态规划经典问题的解法: 最后一块石头的重量II:转化为01背包问题,将石头分成两堆,使两堆重量差最小。 目标和:转化为背包问题,求组合方法数,提供二维和一维DP两种解法。 一和零:二维背包问题,物品重量有两个维度(0和1的个数)。 三题都采用01背包思路,但各有特点:第一题求最大承重,第二题求方法数,第三题是二维背包。解题关键在于正确理解问题转化、DP数组定义和递推公式。
2025-08-28 10:42:18
734
原创 代码随想录算法训练营30天 | 01背包理论基础、416. 分割等和子集
本文介绍了动态规划中01背包问题的理论基础和两种解法。第一种是二维DP数组解法,通过定义dp[i][j]表示前i件物品在容量j下的最大价值,推导出状态转移方程dp[i][j]=max(dp[i-1][j], dp[i-1][j-weight[i]]+value[i])。第二种是优化的一维DP数组(滚动数组)解法,将状态转移简化为dp[j]=max(dp[j], dp[j-weight[i]]+value[i]),并采用倒序遍历背包容量以避免重复计算。文章还以分割等和子集问题为例,展示了01背包理论的应用。
2025-08-27 15:27:24
733
原创 代码随想录算法训练营29天 | 62.不同路径、63. 不同路径 II、343. 整数拆分(提高)、96.不同的二叉搜索树(提高)
本文总结了动态规划在解决不同路径、整数拆分等问题中的应用。对于不同路径问题(62题),通过构建二维dp数组,利用dp[i][j]=dp[i-1][j]+dp[i][j-1]的递推公式计算路径数;当存在障碍物时(63题),需在初始化时跳过障碍。整数拆分问题(343题)则采用一维dp数组,dp[i]表示数字i的最大乘积,递推公式为max((i-j)*j, dp[i-j]*j)。文章还提到二叉搜索树问题(96题)的解法待更新。这些案例展示了动态规划"分治+记忆化"的核心思想,通过状态转移方程将
2025-08-24 14:51:17
779
原创 代码随想录算法训练营28天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
本文介绍了动态规划的基础理论和三个经典例题:斐波那契数、爬楼梯和使用最小花费爬楼梯。重点讲解了动态规划五部曲:确定dp数组含义、递推公式、初始化、遍历顺序和举例验证。斐波那契数采用dp[i]=dp[i-1]+dp[i-2]递推;爬楼梯问题类似,但初始化不同;最小花费爬楼梯则需结合体力消耗计算最小值。这些例题展现了动态规划解决重叠子问题的优势,为后续更复杂的动态规划问题奠定了基础。
2025-08-23 16:31:35
991
原创 代码随想录算法训练营27天 | 56. 合并区间、738.单调递增的数字、968.监控二叉树(提高)
本文总结了三个贪心算法题目:1)合并区间,通过排序和区间重叠判断实现;2)单调递增数字,从后向前遍历调整数字;3)监控二叉树(待补充)。重点展示了前两题的代码实现:合并区间使用排序和区间合并策略,单调递增数字采用数字字符处理技巧。这些题目展示了贪心算法在解决特定问题时的有效性,通过局部最优选择达到全局最优解。文章还提到后续会更新二叉树监控和算法总结内容。
2025-08-22 11:21:21
607
原创 代码随想录算法训练营26天 | 452. 用最少数量的箭引爆气球、435. 无重叠区间、763.划分字母区间
本文介绍了三个贪心算法经典问题:1) 452题用最少数量的箭引爆气球,通过按左边界排序并比较右边界确定射箭位置;2) 435题无重叠区间,提供两种解法:转化为气球问题求补集或直接统计重叠区间;3) 763题划分字母区间,利用哈希表记录字符最后出现位置,动态维护切割边界。这些题目展示了贪心算法的核心思想:通过局部最优选择达到全局最优解,适用于区间调度和字符串处理等问题。
2025-08-21 12:42:47
686
原创 代码随想录算法训练营25天 | 134. 加油站、135. 分发糖果、860.柠檬水找零、406.根据身高重建队列
本文介绍了四道贪心算法题目的解题思路和代码实现。1)加油站问题通过计算累计剩余油量确定起点;2)分发糖果问题采用两次遍历,分别处理左右评分关系;3)柠檬水找零问题优先使用大额零钱;4)身高重建队列问题先按身高排序再按k值插入。这些题目都体现了贪心算法"局部最优推导全局最优"的思想,通过合理定义局部最优解,最终得到全局最优解。解题时需注意处理顺序和边界条件,不同题目需要根据具体特点设计不同的贪心策略。
2025-08-17 09:09:34
666
原创 代码随想录算法训练营24天 | 122.买卖股票的最佳时机 II、55. 跳跃游戏、45.跳跃游戏 II、1005.K次取反后最大化的数组和
摘要:本文总结了贪心算法在四道经典题目中的应用。1.买卖股票问题通过分解每日正利润实现全局最优;2.跳跃游戏通过维护最大覆盖范围判断可达性;3.跳跃游戏II通过动态更新覆盖范围计算最小步数;4.K次取反问题通过每次反转最小值最大化数组和。这些解法都体现了贪心算法的核心思想:通过局部最优选择逐步达到全局最优解。文章还提到后续将用动态规划方法重新解决股票问题,并预告了阶段总结内容。
2025-08-16 12:27:40
558
原创 代码随想录算法训练营23天 | 455.分发饼干、376. 摆动序列、53. 最大子序和
本文总结了贪心算法的理论基础和三个典型应用:分发饼干、摆动序列和最大子序和问题。贪心算法的核心是局部最优解导向全局最优解。分发饼干问题采用大小匹配策略,摆动序列通过识别坡度变化点来统计峰值,最大子序和则通过舍弃负和来维护最大连续和。每个问题都给出了详细的解题思路和代码实现,并讨论了边界条件和特殊情况处理。这些案例展示了贪心算法在实际问题中的应用模式,为后续学习动态规划解法奠定了基础。
2025-08-15 11:11:03
625
原创 代码随想录算法训练营22天 | 491.递增子序列、46.全排列、47.全排列 II、332.重新安排行程(提高)、51. N皇后(提高)、37. 解数独(提高)
本文总结了回溯算法在解决递增子序列、全排列、N皇后等经典问题时的应用。对于递增子序列问题,重点在于不能对原数组排序,并通过集合或数组实现去重;全排列问题需注意使用标记数组处理重复元素;N皇后问题则通过递归控制行、循环控制列,并验证每个位置的合法性。文章提供了清晰的代码实现和关键思路,强调回溯过程中状态标记的重要性,并指出后续可提高的题目方向(如解数独、重新安排行程等)。
2025-08-14 15:38:42
469
原创 代码随想录算法训练营21天 | 93.复原IP地址、78.子集、90.子集II
本文介绍了回溯算法解决三类问题的实现:1. 复原IP地址通过递归分割字符串,验证每段数字的有效性(0-255);2. 子集问题收集所有节点结果,通过递归遍历所有可能的元素组合;3. 子集II在子集基础上增加去重处理,通过排序和标记数组避免重复子集。三题均采用回溯框架,关键区别在于终止条件和去重处理。IP地址需验证分段有效性,子集问题收集全路径,子集II需处理重复元素。
2025-08-07 10:32:12
600
原创 代码随想录算法训练营20天 | 39. 组合总和、40.组合总和II、131.分割回文串
本文总结了回溯算法在组合和分割问题中的应用。组合总和问题(39题)允许元素重复使用,通过剪枝优化递归效率;组合总和II(40题)要求元素仅用一次且需处理重复元素,通过used数组标记树层去重;分割回文串(131题)将切割转化为组合问题,使用双指针判断回文子串。关键点在于:1)组合问题中startIndex控制递归范围;2)树层去重需排序和标记;3)切割问题通过startIndex模拟切割线。这些题目展示了回溯算法处理组合类问题的通用模板和变体技巧。
2025-08-06 10:56:48
724
原创 代码随想录算法训练营19天 | 77.组合、216.组合总和III、17.电话号码的字母组合
本文介绍了回溯算法的理论基础及其在组合问题中的典型应用。主要包括77.组合、216.组合总和III、17.电话号码的字母组合三个问题的解法。文章详细讲解了回溯算法的模板结构,通过startIndex参数避免重复组合,并给出了剪枝优化的方法。在组合总和问题中,增加了对元素总和的限制条件;在电话号码字母组合问题中,使用数字-字母映射表进行处理。这些解法都遵循回溯算法的基本框架:路径记录、条件判断、递归调用和回溯撤销。文章还提示了回溯算法在其他类型问题(如切割、子集、排列、棋盘等)中的应用可能性。
2025-08-03 10:03:40
612
原创 代码随想录算法训练营18天 | 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
该文章介绍了二叉搜索树的三个经典算法问题及解法:1. 修剪二叉搜索树(669题),通过递归判断节点值范围决定是否保留;2. 将有序数组转换为二叉搜索树(108题),采用二分法递归构建平衡BST;3. 二叉搜索树转累加树(538题),利用右-中-左的逆中序遍历累加节点值。每个解法都给出了清晰的递归思路和代码实现,并建议后续可以通过迭代法进一步优化。文章结构清晰,代码注释详细,适合算法学习者理解BST相关操作。
2025-08-02 10:52:17
529
原创 代码随想录算法训练营17天 | 235. 二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
本文介绍了二叉搜索树的三种重要操作。1) 查找最近公共祖先:通过比较节点值决定递归方向,当前节点值位于两目标节点值之间时即为所求;2) 插入操作:递归找到合适位置后新建节点,迭代法则需记录父节点位置;3) 删除节点:处理五种情况,包括叶子节点、单子树节点和双子树节点(需将左子树接至右子树最左节点)。这些操作均利用二叉搜索树的有序特性,通过值比较决定操作路径,时间复杂度为O(h),h为树高。
2025-08-01 09:27:04
663
原创 代码随想录算法训练营16天 | 530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
本文总结了三道二叉树相关的算法题解:1) 二叉搜索树的最小绝对差,采用中序遍历递归解法,比较相邻节点差值;2) 二叉搜索树的众数查找,通过一次遍历同时记录频率和最大频率;3) 二叉树的最近公共祖先,使用后序遍历处理左右子树的返回值。解法均采用递归实现,其中第三题通过判断左右子树返回值来定位最近公共祖先。文章还提示后续可尝试迭代法实现前两道题,并思考非二叉搜索树情况下如何求众数。
2025-07-31 09:15:49
458
原创 代码随想录算法训练营15天 | 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
本文总结了二叉树相关的4个经典算法题解。654题通过前序遍历递归构造最大二叉树,每次选取数组最大值作为根节点并分割数组;617题展示了合并二叉树的递归和迭代两种解法,重点处理节点叠加逻辑;700题利用二叉搜索树特性实现高效搜索;98题通过中序遍历验证二叉搜索树,给出数组、最大值和双指针三种验证方法。这些题目涵盖了二叉树构造、遍历、搜索和验证等核心操作,解题时需注意不同遍历顺序的应用场景。递归法是解决二叉树问题的通用方法,而迭代法在某些情况下性能更优。
2025-07-30 11:35:30
422
原创 代码随想录算法训练营14天 | 513.找树左下角的值、112.路径总和、113.路径总和ii、106.从中序与后序遍历序列构造二叉树、105.从前序与中序遍历序列构造二叉树
这篇文章总结了二叉树相关的5个算法题解,包括找树左下角的值、路径总和、路径总和II以及两种遍历序列构造二叉树的方法。对于找左下角值,提供了迭代法(层序遍历)和递归法两种解法;路径总和问题通过递归和迭代两种方式实现,重点处理路径计数和回溯;构造二叉树的解法详细说明了如何根据中序+后序或前序+中序遍历序列重建二叉树,通过切割数组和递归处理左右子树。文章还指出可以通过传索引优化性能,避免频繁拷贝vector。整体涵盖了二叉树遍历、路径处理和重构等核心算法。
2025-07-30 09:57:37
648
原创 代码随想录算法训练营13天 | 222.完全二叉树的节点个数、110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
本文总结了二叉树相关算法题解:1.完全二叉树的节点计数(递归/迭代/利用完全二叉树性质优化);2.平衡二叉树判断(递归计算高度差);3.二叉树所有路径(前序遍历+回溯);4.左叶子节点求和(迭代/递归)。重点涉及多种遍历方式、完全二叉树性质应用、回溯技巧等。文章提供了详细的代码实现,并指出后续可优化方向(如平衡二叉树的迭代解法)。这些题目涵盖了二叉树的基础操作和典型问题解决方法。
2025-07-24 12:47:04
830
原创 代码随想录算法训练营12天 | 226.翻转二叉树、101. 对称二叉树、104.二叉树的最大深度、111.二叉树的最小深度
本文介绍了二叉树相关的多个算法题解,包括翻转二叉树(递归法和迭代法的前序、中序、后序遍历实现)、判断对称二叉树(递归和迭代实现)、相同树比较、子树判断、二叉树和N叉树的最大/最小深度计算(后序遍历解法),以及N叉树的前序和后序遍历。重点讲解了递归思路在不同问题中的灵活应用,如通过比较外侧和内侧节点判断对称性,以及处理节点为空等边界条件的技巧。文章还区分了节点深度和高度的概念,并针对不同遍历顺序的特点进行了详细分析。
2025-07-18 14:40:01
649
原创 代码随想录算法训练营11天 | 二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代法、二叉树的层序遍历
这篇文章系统介绍了二叉树的各种遍历方法,包括递归和非递归实现。
2025-07-17 08:59:01
712
原创 代码随想录算法训练营10天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素
本文介绍了三个经典栈与队列算法题解,代码实现展示了栈、队列和堆的典型应用场景,为处理类似问题提供了模板思路。
2025-07-14 17:32:53
568
原创 代码随想录算法训练营09天 | 232.用栈实现队列、225. 用队列实现栈、20. 有效的括号、1047. 删除字符串中的所有相邻重复项
本文介绍了栈和队列的经典题目实现方法。通过合理设计出入栈/队列顺序,可以高效解决各类相关问题。
2025-07-14 11:51:48
423
原创 代码随想录算法训练营08天 | 151.翻转字符串里的单词、右旋字符串、28. 实现 strStr()、459.重复的子字符串
本文总结了字符串处理的四个经典算法,文章重点解析了翻转字符串和KMP算法的实现细节,强调双指针和前缀表在字符串处理中的重要性,为后续字符串算法学习打下基础。
2025-07-12 15:07:33
619
原创 代码随想录算法训练营07天 | 344.反转字符串、541. 反转字符串II、替换数字
本文总结了三个字符串处理问题。核心思想是通过指针操作减少空间消耗,利用逆向处理避免数据覆盖问题。
2025-07-08 17:04:20
408
原创 代码随想录算法训练营05天 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和
【代码】代码随想录算法训练营05天 | 242.有效的字母异位词、349.两个数组的交集、202.快乐数、1.两数之和。
2025-07-03 21:10:03
689
原创 代码随想录算法训练营04天 | 24. 两两交换链表中的节点、19.删除链表的倒数第N个节点、面试题 02.07. 链表相交、142.环形链表II
链表相关的四道经典算法题解法
2025-07-02 17:51:48
236
原创 代码随想录算法训练营03天 | 203.移除链表元素、707.设计链表、206.反转链表
【代码】代码随想录算法训练营03天 | 203.移除链表元素、707.设计链表、206.反转链表。
2025-06-30 17:36:53
171
空空如也
【寻助】Java如何调用主板蜂鸣器
2022-04-29
TA创建的收藏夹 TA关注的收藏夹
TA关注的人