自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(30)
  • 收藏
  • 关注

原创 代码随想录算法训练营第三十五天|背包理论基础 416、分割等和子集

摘要:本文介绍了01背包问题的两种解法(二维数组和滚动数组)及其在分割等和子集问题中的应用。二维数组解法通过构建dp[i][j]表示重量为j时的最大价值,采用双重循环遍历物品和背包容量。滚动数组解法优化空间复杂度,使用一维数组并逆序遍历背包容量。最后将01背包思想应用于分割等和子集问题,通过判断能否找到和为总和一半的子集来求解。两种解法都遵循动态规划的基本步骤:定义状态、状态转移、初始化和遍历顺序。

2026-05-16 17:37:26 313

原创 代码随想录算法训练营第三十四天|62、不同路径 63、不同路径II

本文讨论了两种不同路径问题的动态规划解法。62题描述机器人在m×n网格中从左上角到右下角的不同路径数,使用动态规划,状态转移方程为dp[i][j]=dp[i-1][j]+dp[i][j-1],初始化首行首列为1。63题增加了障碍物限制,当遇到障碍时路径数为0,初始化时若首行/列有障碍则后续位置不可达。两题均采用自顶向下的遍历顺序,通过填表法求解最终路径数。

2026-04-27 22:48:35 233

原创 代码随想录算法训练营第三十二天|509、斐波那契数 70、爬楼梯 746、使用最小花费爬楼梯

本文介绍了动态规划(DP)的基本概念和解题步骤,并通过三个经典例题进行实践讲解。动态规划适用于存在重叠子问题的情况,其核心是状态转移方程的推导。解题步骤包括:确定dp数组含义、递推公式、初始化、遍历顺序及举例验证。509题斐波那契数列展示了基础DP模型;70题爬楼梯问题演示了状态转移的应用;746题最小花费爬楼梯则结合了成本计算。三个例题均采用自底向上的解法,时间复杂度O(n),空间复杂度优化后可达O(1)。文章强调通过打印dp数组验证思路的重要性。

2026-04-24 11:21:55 318

原创 代码随想录算法训练营第三十一天|56、合并区间 738、单调递增的数字

本文解析了两个算法问题:合并区间和单调递增数字。合并区间问题要求将重叠区间合并,解法是先排序区间,然后逐个比较合并重叠区间。单调递增数字问题需要找到不大于给定数字的最大递增数,解法是从后往前遍历数字,遇到递减时调整前一位数字并将后续位设为9。两个问题都展示了贪心算法的应用,通过局部最优解达到全局最优。合并区间的时间复杂度为O(nlogn),单调递增数字为O(n)。

2026-04-20 21:53:16 53

原创 代码随想录算法训练营第三十天|452、用最少数量的箭引爆气球 435、无重叠区间 763、划分字母区间

本文介绍了三个区间划分问题的解法。452题要求用最少数量的箭引爆所有气球,通过按起点排序并合并重叠区间求解。435题要求移除最小区间数使剩余区间不重叠,同样采用排序和合并策略。763题将字符串划分为最多片段,每个字母只出现在一个片段中,通过记录字母最后出现位置并划分区间解决。三个问题都采用了贪心算法思想,通过排序和区间合并来达到最优解。

2026-04-19 11:27:55 256

原创 代码随想录算法训练营第二十九天|134、加油站 135、分发糖果 860、柠檬水找零 406、根据身高重建队列

本文摘要: 134.加油站问题:通过比较gas和cost数组,找到唯一可能的起点站。解题思路采用贪心算法,若当前油量不足则重置起点,最终验证总油量是否足够完成环行。135.分发糖果问题:要求相邻孩子中评分高的获得更多糖果,需双向遍历处理左右规则,取最大值确保条件满足。860.柠檬水找零问题:处理5/10/20美元账单时,优先使用10美元找零20美元,保证找零成功。406.身高重建队列问题:按身高降序排列后,根据k值直接插入对应位置,确保前面有k个更高的人。四题均采用贪心策略,通过局部最优实现全局最优解。

2026-04-18 17:42:54 337

原创 代码随想录算法训练营|122、买卖股票的最佳时机II 55、跳跃游戏 45、跳跃游戏II 1005、K次取反后最大化的数组和

本文总结了四个贪心算法相关的LeetCode题目解法。122题通过计算每日正利润差求解股票买卖最大收益;55题通过维护当前可跳跃范围判断能否到达终点;45题统计跳跃次数时记录最远覆盖范围;1005题则通过优先取反绝对值大的负数来最大化数组和。这些解法都体现了贪心算法的局部最优推导全局最优的思想,时间复杂度均为O(n),空间复杂度O(1)。

2026-04-17 13:21:17 336

原创 代码随想录算法训练营第二十七天| 455、分发饼干 376、摆动序列 53、最大子数组和

贪心的本质是选择每一阶段的局部最优,从而达到全局最优。

2026-04-16 22:11:44 402

原创 代码随想录算法训练营第二十五天|491、非递减子序列 46、全排列 47、全排列II

本文总结了回溯算法在处理子序列、排列问题时的解题思路和去重方法。主要内容包括:1. 非递减子序列问题:不能对原数组排序,需用集合进行树层去重,避免重复子序列;2. 全排列问题:不需要start参数,通过used数组标记已使用元素;3. 含重复元素的全排列:可使用排序后树层去重或每层用集合去重。文章强调回溯算法的核心在于正确处理递归过程中的去重逻辑,区分树层去重和树枝去重的应用场景,并提供了相应的代码实现模板。

2026-04-15 17:57:13 347

原创 代码随想录算法训练营第二十四天| 93、复原IP地址 78、子集 90、子集II

摘要:本文总结了LeetCode中三个回溯算法题目。93题要求复原有效IP地址,通过回溯分割字符串并验证每段合法性;78题求数组所有子集,回溯过程中记录所有路径;90题在含重复元素的数组中求不重复子集,需先排序并跳过重复元素。三题均采用回溯框架,通过递归遍历所有可能解,并根据不同条件进行剪枝优化。

2026-04-14 20:31:13 247

原创 代码随想录算法训练营第二十三天|39、组合求和 40、组合求和II 131、分割回文串

本文总结了组合总和和分割回文串两类回溯算法问题。组合总和问题分为允许重复选取元素(39题)和不允许重复选取(40题)两种情况,解题关键在于递归时start参数的传递方式(i或i+1)以及重复元素的去重处理(树层去重)。分割回文串问题(131题)则需要枚举所有可能的字符串分割方式,并通过回文判断筛选合法方案。三者的共同点在于都采用回溯算法框架,通过递归遍历所有可能解,并利用剪枝条件优化搜索过程。文章通过具体示例和代码实现,清晰展示了不同问题的解题思路和实现细节。

2026-04-13 21:22:04 225

原创 代码随想录算法训练营第二十二天|77、组合 216、组合总和III 17、电话号码的字母组合

摘要:本文系统介绍了回溯算法的理论基础和应用实践。首先阐述回溯法的定义(一种递归搜索方式)和效率优化方法(剪枝操作),并列举其适用的五类问题(组合、切割、子集、排列、棋盘问题)。随后通过三个典型例题详细讲解回溯法的应用:77题展示组合问题的基本解法与剪枝优化;216题在组合基础上增加总和条件;17题处理多集合组合问题。每个案例均包含解题思路、代码实现和剪枝优化技巧,突出回溯法的树形结构特征(横向遍历集合元素,纵向递归延伸)和模板化实现方法。

2026-04-12 00:13:51 394

原创 代码随想录算法训练营第二十一天| 669、修剪二叉搜索树 108、将有序数组转换为二叉搜索树 538、把二叉搜索树转换为累加树

本文总结了二叉搜索树相关的三个经典算法题解:1. 修剪二叉搜索树(669):通过递归处理节点值与区间的关系,直接返回符合条件的子树,利用二叉搜索树特性简化修剪逻辑。2. 有序数组转平衡二叉搜索树(108):采用分治法,每次取数组中间元素作为根节点,左右子数组递归构建平衡树。3. 二叉搜索树转累加树(538):使用反中序遍历(右-根-左)配合全局累加变量,实现从大到小依次累加更新节点值。解题关键在于理解二叉搜索树特性,合理运用递归框架,注意遍历顺序和变量传递的细节处理。

2026-04-11 18:06:14 332

原创 代码随想录算法训练营第二十天 |235、二叉搜索树的最近巩固祖先 701、二叉搜索树中的插入操作 450、删除二叉搜索树中的节点

本文介绍了二叉搜索树(BST)的三种常见操作算法。235题通过比较节点值与根节点值的关系,递归寻找两个节点的最近公共祖先。701题演示了BST插入操作,根据值大小递归寻找合适位置插入新节点。450题详细讲解了BST节点删除的五种情况处理,重点解决了删除根节点时如何重组子树结构的问题。三题均采用递归解法,充分利用BST左小右大的特性,通过比较节点值决定递归方向,体现了BST操作的核心思想。

2026-04-10 15:33:43 233

原创 代码随想录算法训练营第十八天| 530、二叉搜索树的最小绝对差 501、二叉搜索树中的众数 236、二叉树的最近公共祖先

本文总结了二叉搜索树和二叉树的三个经典算法问题及解法。530题利用二叉搜索树中序遍历有序的特性,通过记录前驱节点计算最小绝对差;501题同样基于中序遍历,使用双指针统计众数出现频率;236题采用后序遍历自底向上查找最近公共祖先。三题均采用递归遍历,分别体现了前序、中序、后序三种遍历方式在不同场景下的应用。解题关键在于理解树的结构特性(如二叉搜索树的有序性)和选择适当的遍历顺序,通过递归实现高效求解。

2026-04-10 14:02:19 163

原创 代码随想录算法训练营第十七天|654、最大二叉树 617、合并二叉树 700、二叉搜索树中的搜索 98、验证二叉搜索树

本文总结了四种二叉树相关算法:1. 最大二叉树构造:通过递归前序遍历,每次选取数组最大值作为根节点,分割左右子数组构建子树。2. 合并二叉树:前序遍历两棵树,节点相加或取非空节点,优化后可减少递归次数。3. 二叉搜索树搜索:利用BST特性递归或迭代搜索,迭代法可优化为直接遍历目标路径。4. 验证BST:中序遍历生成有序数组判断是否严格递增。关键点:构造二叉树常用前序遍历,BST操作利用其有序特性,中序遍历可验证BST有效性。优化建议包括原数组操作和减少不必要的递归。

2026-04-09 15:28:45 345

原创 代码随想录算法训练营第十六天| 513、找树左下角的值 112、路经总和 113、路经总和II 106、从中序与后序遍历序列构造二叉树 105、从前序与中序遍历序列构造二叉树

本文介绍了二叉树相关算法题解,包括513.找树左下角的值、112/113.路径总和系列问题,以及106/105.根据遍历序列构建二叉树。对于找树左下角的值,提出了层序遍历和递归两种解法;路径总和问题展示了递归+集合和递归+布尔两种思路;构建二叉树问题详细说明了如何利用前序/后序与中序序列的切割递归构建树结构。所有解法均包含清晰的解题步骤和代码实现,并总结了构建二叉树问题的核心思路:通过根节点分割左右区间递归构建。

2026-04-08 17:33:16 347

原创 代码随想录算法训练营第十五天|110、平衡二叉树 257、二叉树的所有路径 404、左叶子之和 222、完全二叉树的节点个数

本文总结了二叉树相关题目的解题思路,包括平衡二叉树判断、二叉树路径查找、左叶子节点求和、完全二叉树节点计数等。主要采用递归方法,通过前序遍历处理节点,利用返回值累加结果。关键点包括:平衡二叉树通过高度差判断,路径查找需注意回溯处理,左叶子节点需特殊判断条件,完全二叉树节点计数递归累加。所有解法时间复杂度均为O(n),空间复杂度为O(n)(递归栈深度)。递归时系统会暂存当前函数状态,形成调用栈,每层递归增加一层内存使用。

2026-04-07 20:26:26 205

原创 代码随想录算法训练营第十四天|226、翻转二叉树 101、对称二叉树 104、二叉树的最大深度 111、二叉树的最小深度

本文总结了二叉树相关算法题的解题思路,包括翻转二叉树、对称二叉树、最大深度和最小深度的计算方法。翻转二叉树可通过递归或迭代方式交换左右子树实现;判断对称二叉树可比较左右子树是否镜像对称;计算最大深度可采用层序遍历或后序遍历递归;最小深度则需注意处理单边子树为空的情况,使用层序遍历或递归实现。文中提供了Python代码示例,展示了不同方法的实现细节和适用场景。

2026-04-01 22:21:32 43

原创 代码随想录算法训练营第十三天| 144、二叉树的前序遍历 125、二叉树的后序遍历 94、二叉树的中序遍历 102、二叉树的层序遍历

本文系统介绍了二叉树的理论基础和遍历方法。主要内容包括:1)二叉树分类(满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树);2)存储方式(顺序存储和链式存储);3)遍历方法(深度优先和广度优先)。重点讲解了递归和迭代两种遍历实现方式,包括前序、中序、后序遍历的代码实现,以及层序遍历的队列解法。文章提供了清晰的解题思路和Python代码示例,涵盖二叉树的核心概念和常见操作。

2026-03-31 19:51:49 391

原创 代码随想录算法训练营第十一天|150、逆波兰表达式求值 239、滑动窗口最大值 347、前K个高频元素

本文摘要:本文解析了三道经典算法题目。1. 逆波兰表达式求值:使用栈结构处理运算,注意负数除法向零截断问题,提供了两种实现方案(基础判断和运算符映射)。2. 滑动窗口最大值:采用单调队列维护窗口最大值,详细说明了基于下标和值的两种解法,时间复杂度为O(n)。3. 前K个高频元素:通过哈希表统计频率后使用小顶堆排序,提取前k个元素。文章还总结了栈的内存分布特性,指出其连续性取决于底层容器实现。每道题都包含解题思路、代码实现和关键注意事项。

2026-03-30 18:59:29 306

原创 代码随想录算法训练营第10天| 232、用栈实现队列 225、用队列实现栈 20、有效的括号 1047、删除字符串中所有的相邻重复项

本文总结了栈和队列的基础理论及典型应用。栈通过list实现(O(1)操作),队列推荐使用deque;两者区别在于LIFO与FIFO特性。通过四个问题澄清了Python实现细节。解题部分包含:232题用双栈模拟队列(沙漏模型),225题用队列实现栈(元素循环),20题括号匹配(栈检查相邻配对),1047题相邻重复消除(栈消消乐)。核心思路都是利用栈/队列的特性进行元素匹配或顺序调整,展现了数据结构在算法中的灵活应用。

2026-03-29 21:10:18 394

原创 代码随想录算法训练营第九天|151、反转字符串中的单词 55、右旋字符串

本文包含两个字符串操作题目:1. 反转字符串中的单词(151题):要求反转单词顺序并处理多余空格。提供了三种解法:双指针反转单词数组、先分割后反转数组、以及先整体反转再逐个单词反转。2. 右旋字符串(55题):将字符串尾部k个字符移到前面。解法是将字符串分为两部分后交换位置,时间复杂度O(n)。两种解法都利用了Python字符串切片特性,注意处理边界条件和空间效率。

2026-03-28 21:26:16 40

原创 代码随想录算法训练营第八天| 344、反转字符串 541、反转字符串II 54、替换数字(第八期模拟笔试)

本文总结了三个字符串处理问题的解法。344题要求原地反转字符串数组,使用双指针交换元素实现O(1)空间复杂度。541题处理每2k个字符中前k个的反转,通过列表转换和步长控制实现O(n)复杂度。54题将数字替换为"number",采用从后向前遍历和预留空间的方法,时间复杂度O(n)。三题均涉及字符串操作,但处理方式各有特点,展现了不同场景下的最优解法。

2026-03-27 10:52:43 159

原创 代码随想录算法训练营第七天|454、两数相加II 383、赎金信 15、三数之和 18、四数之和

本文总结了四道哈希表相关算法题的解题思路与要点:454.四数相加II通过哈希表记录前两数组的和,再检查后两数组和的负数是否存在;383.赎金信通过字符计数比较判断能否构成;15.三数之和采用排序+双指针法,重点处理去重问题;18.四数之和在三数之和基础上增加外层循环。哈希表适用于快速判断元素存在性,但需根据数据特点选择数组、集合或字典等结构。解题时需注意边界条件、去重逻辑和剪枝优化,时间复杂度多在O(n^2)到O(n^3)之间。

2026-03-26 15:07:40 366

原创 代码随想录算法训练营第六天 |242、有效的字母异位词 349、两个数组的交集 202、快乐数 1、两数之和

本文总结了哈希表理论基础及其应用。哈希表通过哈希函数映射元素实现快速查找,解决哈希碰撞可采用拉链法和线性探测法。常见的哈希结构包括数组、集合和映射。通过四道LeetCode题目展示了哈希表的应用:242题使用数组/字典统计字符频率判断字母异位词;349题利用集合特性求数组交集;202题用集合检测快乐数循环;1题通过字典存储元素索引实现两数之和。哈希表在元素存在性判断和快速查找方面具有显著优势。

2026-03-25 17:49:35 373

原创 代码随想录算法训练营第四天| 24、两两交换链表中的节点、 19、删除链表的倒数第N个节点 、面试题02.07、链表相交、142、环形链表II

虚拟头节点在实现链表的增删改的时候非常有用,不需要单独处理某个节点链表的常见五个操作:增头增尾删改查反转链表,改变链表的next删除倒数第n个节点,用双指针,fast和slow之间的差就是n,fast指向链尾,slow就是倒数第n个节点的前一个节点链表相交,从后往前数相同长的起始位置开始进行遍历,一旦有一个节点相同那么就是相交链表环形链表,重点在考察快慢指针在环中必相遇的思路。

2026-03-24 17:18:17 320

原创 代码随想录算法训练营第三天| 203、移除链表元素 707、设计链表 206、反转链表

首先需要定义一个节点类,作为链表的基本构建块,每个节点包含当前值和一个指向下一个结点的引用。

2026-03-23 20:17:47 170

原创 代码随想录算法训练营第二天| 209.长度最小的子数组 59.螺旋矩阵II 58.区间和(第九期模拟笔试) 44.开发商购买土地(第五期模拟笔试)

本文摘要:本文包含多个算法题解,主要涉及滑动窗口、螺旋矩阵、前缀和等技巧。209题使用滑动窗口寻找满足条件的最小子数组长度;59题通过模拟过程生成顺时针螺旋矩阵;58题利用前缀和快速计算区间和;44题通过前缀和划分区域求最小土地价值差。各题均给出详细解题思路和代码实现,重点讲解了如何优化暴力解法(如滑动窗口)以及前缀和的应用技巧。

2026-03-22 19:38:23 392

原创 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素、

代码随想录数据结构算法训练营day1704. 二分查找二分查找关键在于区间的划分left = 0right = len(nums) - 1 #满足左闭右闭while left <= right: #因为left = right是合法区间[],不合法时才跳出left = mid + 1 #将区间规定在[mid + 1,right]else:right = mid - 1 #将区间规定在[left,mid - 1]返回值是返回left还是right呢?看判断条件,if如果是<那么就返回left;

2026-03-21 16:36:01 334

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除