自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 动态规划入门

摘要: 动态规划(DP)通过分解重叠子问题并存储解来优化计算,其核心是状态转移方程。以斐波那契数列(LeetCode 509)为例,定义dp[i]为第i个斐波那契数,递推公式为dp[i]=dp[i-1]+dp[i-2],空间可优化至O(1)。爬楼梯问题(LeetCode 70)类似,递推公式相同但初始值不同。最小花费爬楼梯(LeetCode 746)在爬楼梯基础上引入费用权重,递推时取最小花费。三者均需明确状态定义、转移方程和边界条件,并通过滚动变量优化空间。动态规划的关键在于识别子问题间的递推关系,适用于

2026-01-19 09:21:05 1133

原创 贪心算法深化 III

本文介绍了两个贪心算法问题的解题思路:合并区间和单调递增数字。合并区间问题通过排序后逐个合并重叠区间解决,关键步骤是排序和动态更新右边界。单调递增数字问题采用从后往前遍历,找到破坏递增的位置后调整数字并置9。文章总结了贪心算法的核心思想(局部最优到全局最优)、常见解题步骤(排序、找边界、遍历处理)和典型题型策略,强调通过案例验证和拆解问题来应用贪心算法。最后指出贪心算法虽无固定模板,但通过积累解题经验可以培养解题直觉。

2026-01-19 09:15:30 1137

原创 贪心算法深化 II

本文介绍了三个贪心算法问题的解题思路和Java实现: 用最少数量的箭引爆气球: 按气球右边界排序,贪心策略是优先射穿右边界最小的气球 遍历时若气球左边界超过当前箭位置则新增箭 时间复杂度O(nlogn),空间复杂度O(1) 无重叠区间: 按区间右边界排序,优先保留右边界小的区间 统计最多保留的不重叠区间数,最少删除数=总数-保留数 时间复杂度O(nlogn),空间复杂度O(1) 划分字母区间: 记录每个字母最后出现位置,遍历时动态扩展当前区间右边界 当遍历到当前右边界时划分新区间 时间复杂度O(n),空间复

2026-01-19 09:13:35 1108

原创 贪心算法深化 I

本文介绍了四个贪心算法问题的解题思路和代码实现: 加油站问题:通过全局油量判断和局部贪心选择起点,找到能绕行所有加油站的起点。 分发糖果问题:分两次遍历处理左右规则,保证评分高的孩子获得更多糖果。 柠檬水找零问题:优先使用大面额找零,保留小面额应对后续需求。 身高重建队列问题:先处理高个子并按k值插入,确保满足前面有k个更高人的要求。 每个问题都体现了贪心算法的核心思想:通过局部最优选择达到全局最优解。代码实现清晰展示了如何将解题思路转化为具体算法。

2026-01-19 09:11:48 761

原创 贪心算法进阶

本文总结了四道贪心算法题的解题思路与Java实现: 买卖股票II:通过累加所有正差价获得最大利润,无需考虑完整买卖波段。 跳跃游戏:维护当前能到达的最远位置,若遍历时超过该位置则失败,否则更新最远可达位置。 跳跃游戏II:在当前步范围内寻找下一步最远位置,到达边界时增加步数,确保最少跳跃次数。 K次取反最大和:优先反转最小负数,剩余奇数次时反转最小正数,通过两次排序确保最优解。 各解法均采用贪心策略,通过局部最优选择达到全局最优,时间复杂度多为O(n)或O(nlogn)。关键点在于识别问题中的贪心性质并设计

2026-01-19 09:09:17 1029

原创 贪心算法入门

摘要:本文介绍了三个贪心算法问题的解法。1. 分发饼干:通过排序孩子胃口和饼干尺寸数组,用双指针匹配最小能满足的饼干,时间复杂度O(mlogm+nlogn)。2. 摆动序列:通过捕捉极值点统计最长摆动子序列,时间复杂度O(n)。3. 最大子序和:当子序和为负时重置,维护当前和最大值,时间复杂度O(n)。三个问题均采用贪心策略,通过局部最优选择达到全局最优,代码实现简洁高效。

2026-01-14 08:46:29 523

原创 回溯算法深化 II

本文对比分析了几种经典回溯算法问题的解题思路:1. 递增子序列(491题)强调不能排序但需用Set层内去重;2. 全排列(46/47题)展示了有无重复元素时的处理差异,47题通过排序和used数组实现去重;3. 高难度回溯题(如N皇后、解数独)的二维递归特点。核心差异体现在:组合/子集用startIndex控制顺序,排列用used数组标记元素,去重方式根据是否可排序分为层内Set或排序跳过。文章提供了各题型的剪枝条件、复杂度分析和代码模板,帮助系统掌握回溯算法的应用场景和优化技巧。

2026-01-13 18:47:39 814

原创 回溯算法深化 I

本文介绍了三个回溯算法相关的LeetCode题目解法:1. 复原IP地址:使用回溯法分段切割字符串,验证每段合法性(0-255范围、无前导零),通过剪枝优化效率;2. 子集问题(无重复元素):收集递归树所有节点的结果,通过startIndex避免重复子集;3. 子集II(含重复元素):在排序基础上,跳过同一层的重复元素实现去重。关键点包括:IP地址的合法性验证、子集问题的节点收集时机,以及处理重复元素的排序和跳过策略。时间复杂度均为指数级,空间复杂度为线性。

2026-01-13 18:42:11 790

原创 回溯算法进阶

本文解析了LeetCode中三道经典回溯算法题目。39题(组合总和)通过回溯实现元素可重复选取的组合搜索,递归时保持startIndex不变;40题(组合总和II)在元素不可重复使用的基础上,通过排序和条件判断实现去重;131题(分割回文串)将字符串分割转化为回溯问题,通过回文判断筛选有效分割方案。三题均采用回溯框架,核心区别在于选择列表的控制(是否允许重复选取、是否需要去重)和终止条件的设置。解题时需注意:1)通过startIndex避免组合重复;2)及时剪枝提升效率;3)回溯时要恢复状态。这些题目展示了

2026-01-09 16:50:33 1072

原创 回溯算法入门

本文系统介绍了回溯算法的理论基础及其在组合问题中的应用。回溯算法通过递归实现穷举搜索,利用剪枝优化效率,适用于组合、排列等需要遍历所有可能解的问题。文章详细解析了三个典型例题:77题(基础组合)展示了回溯模板和剪枝优化;216题(组合总和)增加了和的条件判断;17题(电话号码字母组合)演示了多维度的组合处理。关键要点包括:固定回溯框架(终止条件-遍历候选-处理/递归/回溯)、剪枝优化的重要性、参数设计的灵活性,以及结果收集时的注意事项。这三道题目由浅入深,完整呈现了回溯算法的核心思想和应用技巧。

2026-01-09 16:46:59 569

原创 二叉树深化 VI

本文介绍了三道二叉搜索树(BST)相关算法题的解题思路。108题将有序数组转换为高度平衡BST,采用分治递归方法,每次选取中间元素作为根节点。538题将BST转换为累加树,通过反向中序遍历和累加变量实现节点值更新。669题修剪BST,根据节点值与范围的关系递归处理左右子树。三道题目均充分利用BST的特性:有序性、中序遍历特点,通过递归分治思想高效解决问题。核心解法都体现了递归在树结构问题中的典型应用模式。

2026-01-08 15:55:03 644

原创 二叉树深化 V

本文介绍了二叉搜索树(BST)的三种核心操作:查找最近公共祖先、插入节点和删除节点。对于最近公共祖先问题,利用BST有序特性通过递归或迭代快速定位;插入操作通过递归或迭代找到合适位置直接插入;删除操作需处理四种情况,尤其当节点有左右子树时,需用后继/前驱节点替代再删除。所有操作时间复杂度均为O(h),其中h为树高。这些操作充分利用了BST左小右大的特性,是理解和应用BST的基础。

2026-01-08 09:25:04 805

原创 二叉树深化 IV

本文总结了二叉搜索树(BST)和二叉树的三类经典问题解法:1. 530题利用BST中序有序特性,通过双指针记录前后节点差值,递归/迭代实现O(n)时间、O(h)空间复杂度的最小绝对差求解。2. 501题基于BST中序连续相同元素特性,动态统计频率并更新众数集合,递归实现高效众数查找。3. 236题采用后序遍历回溯,通过递归返回值判断最近公共祖先,适用于普通二叉树。三题均体现了二叉树遍历的核心思想(中序、后序)和递归技巧,时间复杂度均为O(n),空间复杂度为树高O(h)。

2026-01-05 16:22:01 1261

原创 二叉树深化 III

本文总结了四道二叉树相关算法题的解题思路与实现方法: 654.最大二叉树:通过前序遍历构造二叉树,优化版使用下标索引减少空间消耗,时间复杂度O(n²),空间优化至O(h)。 617.合并二叉树:递归法采用前序遍历合并节点值,迭代法通过队列同步处理节点,注意空节点处理,时间复杂度O(n)。 700.二叉搜索树搜索:利用BST特性定向搜索,递归和迭代法均实现O(h)时间复杂度,迭代法空间最优为O(1)。 98.验证BST:核心是利用中序遍历的有序性,提供递归、迭代和区间约束三种解法,特别注意处理边界值和重复元素

2026-01-03 20:31:34 946

原创 二叉树深化 II

本文总结了二叉树相关的三个经典算法问题及其解法: 513.找树左下角的值 迭代法:层序遍历记录每层第一个节点,最后保留最底层第一个节点 递归法:深度优先遍历,优先访问左子树,记录首次到达更深层时的节点值 112/113.路径总和 112基础版:递归减和,在叶子节点判断剩余值是否匹配 113进阶版:回溯法记录路径,注意结果集需要复制当前路径避免后续修改 106/105.构造二叉树 核心思路:中序序列确定左右子树范围,后序/前序序列确定根节点位置 关键技巧:使用哈希表加速查找,注意子树索引的精确计算 每个问题都

2026-01-03 20:19:04 1005

原创 二叉树深化

本文摘要:文章讲解了四道二叉树相关算法题的解题思路与实现方法。110题通过后序遍历计算节点高度,用-1标记不平衡子树;257题采用前序遍历+回溯记录路径,注意撤销选择操作;404题强调左叶子定义,通过父节点判断并累加;222题区分普通二叉树和完全二叉树的解法,后者利用满二叉树特性优化。核心要点包括:根据需求选择遍历顺序,正确处理递归终止条件,回溯时撤销选择,以及利用二叉树特性优化性能。代码实现均采用递归方式,时间复杂度从O(n)到O(logn)不等。

2025-12-31 16:13:00 838

原创 二叉树进阶

本文总结了二叉树相关问题的递归解法:翻转二叉树采用后序遍历交换左右子树;对称二叉树通过镜像比较左右子树;最大深度计算根节点高度;最小深度需区分叶子节点情况。关键点在于理解递归三要素(参数/返回值、终止条件、单层逻辑)和遍历顺序的选择(前序/后序),避免中序遍历导致的重复操作。对于最小深度,需注意单支树的特殊情况处理。递归解法简洁高效,层序遍历可作为备选方案。掌握这些核心思路能有效解决二叉树常见问题。

2025-12-30 21:22:05 1130

原创 二叉树入门

本文系统介绍了二叉树的遍历方法,包含递归和迭代两种实现方式。首先定义了Java中的二叉树节点类,然后详细讲解了三种深度优先遍历(前序、中序、后序)的递归实现,强调调整节点处理顺序即可实现不同遍历。接着介绍了使用栈的迭代实现方法,包括前序的"中右左"入栈顺序、中序的指针遍历左子树到底,以及后序通过前序调整后反转结果的技巧。还介绍了统一迭代法,使用空节点标记区分访问和处理节点。最后讲解了层序遍历的队列实现,重点在于记录每层节点数进行逐层处理。所有方法均提供了完整的Java代码实现。

2025-12-30 19:58:47 595

原创 栈和队列进阶 | 150. 逆波兰表达式求值 | 239. 滑动窗口最大值 | 347.前 K 个高频元素

本文摘要: 本文介绍了三种栈和队列的进阶算法应用。1. 逆波兰表达式求值:利用栈的后进先出特性计算后缀表达式,注意操作数弹出顺序;2. 滑动窗口最大值:使用单调队列维护窗口内最大值索引,优化时间复杂度至O(n);3. 前K个高频元素:结合哈希表统计频率和小顶堆筛选,实现O(nlogk)的时间复杂度。每种算法都详细讲解了核心思路、解题步骤和实现要点,并提供了标准Java代码实现。文章重点强调了各算法的关键细节和优化原理,如单调队列的维护方式和小顶堆的选择原因。

2025-12-28 21:49:31 1073

原创 栈和队列入门 | 232.用栈实现队列 | 225. 用队列实现栈 | 20. 有效的括号 | 1047. 删除字符串中的所有相邻重复项

本文系统讲解了栈和队列两种基础数据结构及其应用。栈遵循后进先出原则,核心操作包括push、pop、peek等,典型应用于函数调用、括号匹配等场景;队列遵循先进先出原则,核心操作包括enqueue、dequeue等,常用于任务调度、BFS算法等。通过LeetCode经典题目(232、225、20、1047题)展示了二者相互实现的方法及典型应用场景,包括双栈模拟队列、队列调整顺序模拟栈、栈实现括号匹配和相邻重复项删除等。所有解法均给出完整代码和复杂度分析,具有实际应用价值。

2025-12-26 19:07:42 646

原创 字符串进阶 | 151.翻转字符串里的单词

题目要求反转字符串中的单词顺序并规范空格。解决思路是:1)去除首尾空格;2)用正则表达式分割单词;3)反转单词数组;4)用单个空格连接单词。关键点在于处理多余空格和原地反转,时间复杂度O(n),空间复杂度O(1)。示例解法使用Java实现,通过trim()、split("\s+")和数组反转完成操作。

2025-12-25 18:58:18 285

原创 字符串入门 | 344.反转字符串 | 541. 反转字符串II

摘要:本文介绍了两个字符串反转问题的高效解法。第一个问题要求原地反转字符数组,采用双指针法在O(n)时间、O(1)空间内完成交换。第二个问题要求在每2k字符区间内反转前k个字符,通过分段处理(完整2k段、不足2k但有k段、不足k段三种情况)实现,同样保持高效。两个解法都避免了额外空间分配,直接在原数组上操作,具有最优的时间和空间复杂度。关键技巧包括双指针交换和边界条件处理。

2025-12-25 18:54:06 522

原创 哈希表进阶 | 454.四数相加II | 383. 赎金信 | 15. 三数之和 | 18. 四数之和

本文介绍了多个数组求和问题的哈希表解法。454题四数相加II通过分组策略将O(n⁴)优化为O(n²),利用哈希表存储前两数组和及其出现次数,再查找后两数组和的相反数。383题赎金信使用数组计数法检查字符资源是否足够。15题三数之和采用排序+双指针法,固定一个数后转化为两数之和问题,并处理重复解。18题四数之和扩展该思路,通过两层固定和双指针寻找四元组,同样注意去重和剪枝优化。这些解法展示了如何高效处理多数组求和问题,平衡时间与空间复杂度。

2025-12-23 10:27:06 853

原创 哈希表入门 | 242.有效的字母异位词 | 349. 两个数组的交集 | 202. 快乐数 | 1. 两数之和

本文深入解析了哈希表这一高效数据结构。哈希表通过键值对存储数据,利用哈希函数快速定位,使增删改查操作平均时间复杂度达到O(1)。文章详细介绍了哈希表的结构演变(从数组+链表到数组+链表+红黑树)、哈希冲突处理方法、扩容机制及负载因子设计原理。同时对比了HashMap和HashSet的区别,并通过四道典型题目(字母异位词、数组交集、快乐数、两数之和)展示了哈希表在实际问题中的应用。全文系统性地阐述了哈希表的核心概念、实现原理及优化策略,为理解和使用这一数据结构提供了全面指导。

2025-12-22 17:18:46 1372

原创 链表进阶 | 24. 两两交换链表中的节点 | 19.删除链表的倒数第N个节点 | 07. 链表相交 | 142.环形链表II

本文介绍了链表操作中的三个经典问题及解决方案:1. 两两交换链表节点:使用哑结点辅助处理边界情况,通过指针调整相邻节点的顺序;2. 删除倒数第N个节点:采用快慢指针法,快指针先走N步后同步移动,找到目标位置进行删除;3. 环形链表检测:使用快慢指针判断是否有环,并在相遇后通过数学推导找到环的入口节点。这些解法均满足O(n)时间复杂度和O(1)空间复杂度的要求,展示了链表处理的典型技巧。

2025-12-20 17:02:37 1084

原创 链表入门 | 203.移除链表元素 | 707.设计链表 | 206.反转链表

本文介绍了链表数据结构的学习要点。首先对比了数组和链表的性能差异:数组查找快(O(1))但插入删除慢(O(n)),链表则相反。接着讲解了三个链表相关算法题:1) 203题使用哑结点技巧删除指定值节点;2) 707题完整实现链表类,包括增删查等操作;3) 206题经典链表反转问题,通过改变节点指针方向实现。文章提供了详细的解题思路和Java代码实现,重点讲解了处理链表问题时常用的虚拟节点技术。这些基础算法为后续学习更复杂的链表问题(如K个一组翻转)奠定了基础。

2025-12-19 16:23:18 443

原创 数组进阶 | 209.长度最小的子数组 | 59.螺旋矩阵II | 区间和 | 开发商购买土地

难度有所提升啊,为了方便联系之前的数组部分一起看,在此设置一下传送门,方便随时TP过去!注意到有两道题没有leetcode编号,没关系,后面我们慢慢分析。

2025-12-18 18:21:07 498

原创 数组入门 | 704. 二分查找 | 27. 移除元素 | 977.有序数组的平方

本文介绍了三个经典数组算法问题及其解决方案。1) 二分查找:在有序数组中查找目标值,使用左右指针逐步缩小范围,时间复杂度O(logn);2) 移除元素:使用双指针原地删除指定值,快指针遍历数组,慢指针标记有效元素;3) 有序数组平方:利用双指针从数组两端比较平方值,按降序填充结果数组,实现O(n)时间复杂度。这些算法展示了双指针技巧在处理数组问题中的高效应用,包括二分查找、元素过滤和有序处理等常见场景。

2025-12-17 18:59:50 557

空空如也

空空如也

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

TA关注的人

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