自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 二叉树深化

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

2025-12-31 16:13:00 611

原创 二叉树进阶

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

2025-12-30 21:22:05 1063

原创 二叉树入门

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

2025-12-30 19:58:47 553

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

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

2025-12-28 21:49:31 986

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

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

2025-12-26 19:07:42 550

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

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

2025-12-25 18:58:18 198

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

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

2025-12-25 18:54:06 445

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

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

2025-12-23 10:27:06 775

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

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

2025-12-22 17:18:46 1284

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

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

2025-12-20 17:02:37 982

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

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

2025-12-19 16:23:18 370

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

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

2025-12-18 18:21:07 417

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

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

2025-12-17 18:59:50 505

空空如也

空空如也

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

TA关注的人

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