- 博客(627)
- 收藏
- 关注
原创 0457. 环形数组是否存在循环
本文介绍了 LeetCode 环形数组循环问题的解法。题目要求判断数组中是否存在方向一致的循环路径。解题思路采用快慢指针(Floyd 判圈)结合同向性约束,确保路径方向一致。通过剪枝优化避免重复计算,使用访问标记数组提高效率。算法时间复杂度为 O(n),空间复杂度为 O(n)。代码实现了环形索引计算和方向判断,能有效检测符合条件的循环路径。
2025-10-19 07:00:00
443
原创 0142. 环形链表 ii
本文介绍了如何检测单链表中的环并找到环的入口节点。使用Floyd判圈算法,先通过快慢指针相遇判断是否有环,再通过数学推导定位入口节点。时间复杂度为O(n),空间复杂度为O(1)。关键点在于相遇后,将其中一个指针移回起点,两指针同步移动,再次相遇点即为环的入口。代码简洁高效,适用于链表环检测问题。
2025-10-18 08:00:00
505
原创 0141. 环形链表
摘要: 该题目要求判断单链表是否存在环。解题思路采用快慢指针法(Floyd判圈法),慢指针每次走一步,快指针每次走两步。若无环,快指针会先到达末尾;若有环,快指针最终会追上慢指针。边界情况处理空链表或单节点链表直接返回false。代码实现简洁高效,时间复杂度O(n),空间复杂度O(1)。
2025-10-18 07:00:00
452
原创 0143. 重排链表
这篇文章介绍了一种将单链表重排为交错顺序的算法。通过快慢指针找到链表中点并断开,反转后半段链表,最后将两段链表交叉合并。关键步骤包括正确断开链表防止成环,以及使用临时变量保证指针重连顺序。该算法时间复杂度为O(n),空间复杂度为O(1),实现了就地修改链表结构的要求。
2025-10-17 08:00:00
429
原创 2130. 链表最大孪生和
本文介绍了如何求解链表的最大孪生节点和问题。通过快慢指针找到链表中点后,反转后半段链表,然后同步遍历前半段和反转后的后半段,计算每对孪生节点的和并记录最大值。算法的时间复杂度为O(n),空间复杂度为O(1)。该方法高效地解决了问题,且无需额外空间。
2025-10-17 07:00:00
387
原创 0234. 回文链表
本文介绍了如何判断单链表是否为回文链表。通过快慢指针找到链表中点,反转后半部分链表后与前半部分逐节点比较值。若所有节点值匹配则返回true,否则返回false。该方法时间复杂度为O(n),空间复杂度为O(1),高效且节省空间。代码实现包含找中点、反转链表和比较三个步骤,并提供了可选的后半段恢复操作。
2025-10-16 08:00:00
396
原创 2095. 删除链表的中间节点
本文介绍了一种删除链表中间节点的算法。使用快慢指针法,快指针每次移动两步,慢指针移动一步,当快指针到达链表末尾时,慢指针正好指向中间节点的前驱节点,从而可以方便地删除中间节点。该方法的时间复杂度为O(n),空间复杂度为O(1),高效且简洁。
2025-10-16 07:00:00
692
原创 0876. 链表的中间结点
这道题要求找到链表的中间节点,若有两个中间节点则返回第二个。解题思路是使用快慢指针法,快指针每次走两步,慢指针每次走一步,当快指针到达链表末尾时,慢指针恰好指向中间节点。时间复杂度O(n),空间复杂度O(1)。该方法高效且简洁,适用于单链表中间节点的查找。
2025-10-15 08:00:00
506
原创 1721. 交换链表中的节点
该题目要求在单链表中交换正数第k个节点和倒数第k个节点的值。解题思路是使用快慢指针定位:先找到正数第k个节点left,然后保持指针继续走到末尾,同时另一个指针从头开始同步前进,最终停在倒数第k个节点right。交换两个节点的值即可。时间复杂度O(n),空间复杂度O(1)。该解法高效且正确,即使k处于链表中心也能正确处理。
2025-10-15 07:00:00
620
原创 0061. 旋转链表
文章摘要 题目要求将单链表向右旋转k位。解题思路是通过计算链表长度,取模优化旋转步数,将链表首尾相连形成环,然后定位新尾节点并断开环。具体步骤包括:计算链表长度和尾节点,取模确定实际旋转步数,首尾相连成环,遍历找到新尾节点,断开环并返回新头节点。时间复杂度O(n),空间复杂度O(1)。注意处理k为0或链表长度的情况,以及断开环的关键步骤。
2025-10-14 08:00:00
748
原创 0019. 删除链表的倒数第 N 个结点
本文介绍了如何用双指针法删除链表倒数第n个节点。通过设置哑节点dummy,避免处理头节点的特殊情况。具体步骤:1)右指针先走n步;2)双指针同步移动直到右指针到达末尾;3)删除左指针的下一个节点。这种方法时间复杂度为O(n),空间复杂度O(1),能高效解决问题。关键点在于使用dummy节点统一处理边界情况。
2025-10-14 07:00:00
367
原创 2074. 反转偶数长度组的节点
本文解决LeetCode上反转偶数长度链表的组节点问题。给定单链表,按1,2,3,...的递增组长度分组,若某组实际长度为偶数则反转该组节点。使用哑节点统一处理,通过遍历预探每组实际长度,判断奇偶性后决定是否反转。反转时巧妙利用指针将组尾自然指向下一组起点。时间复杂度O(n)仅遍历链表常数次,空间复杂度O(1)使用固定数量指针。关键点在于分组预探和反转时的指针处理,确保链表连接正确。
2025-10-13 08:00:00
884
原创 0025. K 个一组翻转链表
该题要求将链表每k个节点一组进行翻转,不足k的保持原样。解题思路是:先统计链表长度,使用哑节点作为前驱指针p0。对每组k个节点进行原地头插式反转,反转后更新p0指向新头和组尾。若剩余节点不足k则停止。时间复杂度O(n),空间复杂度O(1)。关键步骤包括分组、反转和拼接,确保指针正确连接。
2025-10-13 07:00:00
638
原创 0024. 两两交换链表中的节点
题目要求两两交换链表中的相邻节点,不能修改节点值,只能交换节点。解题思路是使用哑节点简化处理,维护四个指针:当前对的前驱节点、当前两个节点和下一对的起始节点。通过重连指针完成交换,再移动指针处理下一对。代码使用循环实现,时间复杂度O(n),空间复杂度O(1)。
2025-10-12 08:00:00
55080
原创 0092. 反转链表 ii
该题目要求在单链表中反转指定区间 [left, right] 的节点。解题核心是使用哑节点处理边界情况,定位到 left 前驱节点后,对子链表进行原地反转,最后重新连接前后部分。代码通过两次遍历实现:第一次定位前驱节点,第二次反转子链。时间复杂度为 O(n),空间复杂度为 O(1)。关键步骤包括暂存后继节点、反转指针方向以及正确拼接反转后的子链表。
2025-10-12 07:00:00
282
原创 0206. 反转链表
题目要求反转单链表。迭代法通过三个指针(pre、cur、nxt)实现原地反转:每次将当前节点指向已反转部分的前端,并前移指针。时间复杂度O(n),空间复杂度O(1)。代码简洁高效,适用于链表反转问题。
2025-10-11 08:00:00
330
原创 LCR 029. 循环有序列表的插入
摘要 题目要求在已排序的循环链表中插入新节点,保持有序性。关键点在于处理三种情况:常规升序区间、断点处(最大值到最小值)以及全相等值链表。解题时遍历链表,若找到合适的插入位置则立即插入;若遍历一圈仍未找到,则在任意位置插入。时间复杂度为O(n),空间复杂度O(1)。代码通过循环遍历和条件判断确保各种边界情况(如空链表、单节点链表)的正确处理。
2025-10-11 07:00:00
273
原创 0147. 对链表进行插入排序
题目要求对单链表进行插入排序。解题思路是维护一个已排序区间,逐个将未排序节点插入到正确位置。具体步骤包括:使用哑节点dummy简化头部插入,pre指向已排序区间的末尾,cur指向待插入节点。若cur已在正确位置则直接扩展区间,否则将其摘下并插入到已排序区间中合适位置。关键点在于正确处理节点摘取和插入顺序,确保链表不断链。时间复杂度O(n²),空间复杂度O(1)。
2025-10-10 08:00:00
494
原创 2807. 在链表中插入最大公约数
本文介绍了在链表相邻节点间插入最大公约数节点的解法。通过遍历链表,对每对相邻节点计算其值的最大公约数(使用欧几里得算法),然后插入新节点。关键点在于正确处理循环条件和节点指针的移动,确保插入后跳过新增节点继续处理下一对原始节点。时间复杂度为O(n·logV),空间复杂度为O(1)。实现时需注意避免空指针异常,并建议对gcd运算加入绝对值处理以提高鲁棒性。
2025-10-10 07:00:00
332
原创 2487. 从链表中移除节点
这道题目要求删除链表中所有右侧存在更大值的节点。解题思路采用两次反转链表的方法:第一次反转将问题转化为从左到右处理,遍历时维护当前最大值,删除小于当前值的后继节点;第二次反转恢复原顺序。该算法时间复杂度为O(n),空间复杂度O(1),能正确处理边界情况如空链表或单节点链表。通过反转链表巧妙转换问题方向,简化了比较逻辑。
2025-10-09 08:00:00
728
原创 1669. 合并两个链表
题目要求在链表 list1 中删除区间 [a, b] 的节点,并将整个 list2 插入该位置。关键步骤包括:定位 list1 中 a-1 和 b+1 位置的节点 left 和 right,将 list2 的头连到 left.next,list2 的尾连到 right。时间复杂度 O(a + b + |list2|),空间复杂度 O(1)。注意处理边界条件,如 a ≥ 1 且 b 在 list1 范围内,避免空指针异常。
2025-10-09 07:00:00
406
原创 0237. 删除链表中的节点
摘要 题目要求在无法访问头节点的情况下删除单链表中的指定非末尾节点。解题思路是巧妙地将下一个节点的值复制到当前节点,然后跳过下一个节点,等效完成删除操作。该方法仅需常数时间(O(1)时间复杂度)且无需额外空间(O(1)空间复杂度)。关键注意事项:被删除节点不能是尾节点,且该方法本质删除的是后继节点对象,可能影响节点引用的语义一致性。
2025-10-08 08:00:00
430
原创 0082. 删除排序链表中的重复元素 ii
摘要 题目要求删除排序链表中所有重复节点(不保留任何重复节点)。解决思路是使用哑节点处理头节点可能被删除的情况,通过指针遍历链表:当发现重复段时,记录该值并跳过所有重复节点;否则指针前移。该方法时间复杂度为O(n),空间复杂度为O(1)。关键点在于正确识别重复段并整段删除,同时利用哑节点简化边界条件处理。
2025-10-08 07:00:00
585
原创 0083. 删除排序链表中的重复元素
这是一道关于删除有序链表中重复元素的题目。解题思路是利用单指针遍历链表,比较当前节点与下一节点的值,若相同则删除重复节点,否则移动指针继续检查。算法时间复杂度为O(n),空间复杂度为O(1)。代码实现简洁高效,适用于处理已排序链表中的重复元素问题。
2025-10-07 08:00:00
271
原创 3217. 从链表中移除在数组中存在的节点
文章摘要 本文介绍了如何删除链表中所有节点值出现在给定数组中的节点。解题思路是将数组元素存入哈希集合以实现O(1)查询,使用哑节点统一处理删除逻辑。通过遍历链表,检查每个节点的值是否在集合中,决定是否删除该节点。算法时间复杂度为O(n+m),空间复杂度为O(m),其中n为链表长度,m为数组长度。核心在于利用哈希集合和哑节点简化删除操作,确保正确性和效率。
2025-10-07 07:00:00
341
原创 0203. 移除链表元素
本文介绍了两个链表问题,要求删除所有节点值为给定val的节点。解题思路是使用哑节点简化删除操作,通过指针遍历链表,遇到目标节点时则跳过。时间复杂度O(n),空间复杂度O(1)。代码实现用Java完成,核心逻辑是维护一个前置指针,动态调整链表连接关系。
2025-10-06 08:00:00
434
原创 0817. 链表组件
题目要求统计链表中由连续节点组成的组件数量,这些节点的值都在给定数组nums中。解题思路是将nums存入哈希集合以快速查询,然后遍历链表,遇到连续存在于集合中的节点视为一个组件。具体实现中,遍历链表时识别连续段并计数。时间复杂度O(n + m),空间复杂度O(m),其中n为链表长度,m为nums长度。
2025-10-06 07:00:00
479
原创 0725. 分隔链表
本文介绍了如何将单链表拆分为k个连续部分的方法。首先统计链表长度n,然后计算每部分的基础长度n/k和需要额外分配节点的前n%k部分。通过遍历链表,将每一段按指定长度切割并断开连接,前若干段长度比后面的多1。若节点不足k,剩余部分为null。算法时间复杂度O(n+k),空间复杂度O(1)。正确性体现在处理n<k和n≥k的情况,以及确保段间正确断开连接。
2025-10-05 08:00:00
293
原创 2181. 合并零之间的节点
该题目要求处理以0开头和结尾的单链表,将相邻非零节点序列的和存入前一个0节点,并删除中间分隔节点。解题思路是使用tail指针指向当前段的和节点,遍历链表时累加非零值到tail节点,遇到0时移动tail到下一节点并清零。最后断开多余节点,返回处理后的链表。算法时间复杂度O(n),空间复杂度O(1),能正确处理各边界情况。
2025-10-05 07:00:00
572
原创 2058. 找出临界点之间的最小和最大距离
该题解要求在单链表中找出所有临界点(极大值或极小值节点),并返回相邻临界点最小距离和首尾临界点最大距离。解题思路是使用三个指针滑动扫描链表,判断中间节点是否为临界点。若临界点少于2个,返回[-1,-1];否则记录首个、末个临界点位置及相邻距离,最终返回最小相邻距离和首尾距离。算法时间复杂度O(n),空间复杂度O(1)。关键点在于正确处理临界点判断、位置跟踪和边界情况。
2025-10-04 09:00:00
754
原创 1290. 二进制链表转整数
摘要 本题要求将单向链表表示的二进制数转换为十进制整数。解题思路是遍历链表,对于每个节点值v,通过公式ans = ans * 2 + v逐步累加计算十进制结果。时间复杂度O(n),空间复杂度O(1)。需要注意链表长度可能导致的整数溢出问题,但题目通常保证节点数不超过30位。
2025-10-04 08:00:00
435
原创 [面试精选] 0739. 每日温度
题目要求根据每日温度数组,计算每一天需要等待多少天后会出现更高温度。采用单调栈方法,栈中存储未找到更高温度的索引,遍历数组时比较当前温度与栈顶温度,弹出栈顶并计算等待天数。该方法的时间复杂度为O(n),空间复杂度为O(n)。示例代码使用Java实现,通过维护单调递减栈高效解决问题。 关键词:每日温度、单调栈、时间复杂度O(n)、索引存储、等待天数
2025-07-15 07:00:00
434
原创 [面试精选] 0394. 字符串解码
题目要求解码形如 k[encoded_string] 的嵌套编码字符串,例如 3[a2[c]] 解码为 accaccacc。采用双栈法:一个栈存储重复次数,另一个栈存储外层字符串。遍历字符时:数字计算重复次数;[ 压栈并重置状态;] 弹栈拼接重复后的字符串;字母直接拼接。时间复杂度为 O(n)(均摊分析),空间复杂度为 O(n)(栈和字符串存储)。代码通过栈处理嵌套结构,确保正确解码。
2025-07-14 08:00:00
661
原创 [面试精选] 0155. 最小栈
设计一个能在常数时间内获取最小元素的最小栈(MinStack)。通过使用双栈法(一个主栈存储元素,一个辅助栈同步存储当前最小值),实现了所有操作的时间复杂度均为O(1)。具体实现中,push()和pop()操作同步更新两个栈,getMin()直接返回辅助栈顶元素。空间复杂度在最坏情况下为O(n)。该方法高效地满足了题目要求,适用于需要快速获取栈最小值的场景。
2025-07-14 07:00:00
946
原创 [面试精选] 0020. 有效的括号
题目要求判断仅包含括号字符 '(){}[]' 的字符串是否有效。有效条件包括:括号类型匹配、顺序正确且成对闭合。采用栈结构辅助,遍历时左括号入栈,右括号与栈顶匹配则出栈,否则无效。使用哈希表存储括号映射,提前校验奇数长度字符串。时间复杂度O(n),空间复杂度O(n)。关键点:栈的LIFO特性确保括号顺序正确,双端队列优化栈操作效率。 核心思路:栈匹配法 + 哈希表快速查询。
2025-07-13 08:00:00
605
原创 [面试精选] 0004. 寻找两个正序数组的中位数
题目要求找出两个有序数组的中位数,时间复杂度需为O(log(min(m,n)))。解题核心是二分查找法:将两个数组分割为左右两部分,确保左边部分的所有元素小于右边部分,并通过调整分割点满足条件。关键点包括保证nums1为较短的数组,使用哨兵节点简化边界判断,最终根据元素总数的奇偶性返回中位数。时间复杂度为O(log(min(m,n))),空间复杂度为O(m+n)(可优化至O(1))。
2025-07-13 07:00:00
488
原创 [面试精选] 0153. 寻找旋转排序数组中的最小值
题目要求设计一个时间复杂度为O(log n)的解决方案。通过二分查找算法,比较中间元素与最后一个元素的值,逐步缩小搜索范围:若中间元素小于末尾元素,说明最小值在左半部分;否则在右半部分。最终返回右边界指向的元素即为最小值。该算法的时间复杂度为O(log n),空间复杂度为O(1)。
2025-07-12 08:00:00
751
原创 [面试精选] 0033. 搜索旋转排序数组
题目要求在旋转后的有序数组中查找目标值,并返回其下标或-1。通过二分查找确定旋转点,将数组分为两部分,再根据目标值选择合适的有序区间进行查找。核心算法包括两步:先找到最小值位置,再在对应区间执行二分搜索。时间复杂度为O(log n),空间复杂度为O(1)。代码通过findMin定位旋转点,lowerBound进行标准二分查找,确保高效性和正确性。
2025-07-12 07:00:00
614
原创 [面试精选] 0034. 在排序数组中查找元素的第一个和最后一个位置
通过两次二分查找:第一次定位目标值的起始位置,第二次通过查找目标值+1的位置减1得到结束位置。关键点在于利用lowerBound函数高效定位边界,同时处理目标值不存在的情况。算法时间复杂度为O(log n),空间复杂度为O(1),适用于大规模数据的高效查询。代码实现简洁,通过开区间二分查找确保正确性和效率。
2025-07-11 08:00:00
416
原创 [面试精选] 0074. 搜索二维矩阵
该题目要求在满足特定排序条件的二维矩阵中查找目标值。矩阵每行从左到右递增,且每行首元素大于前一行末元素。解法利用二分查找,将二维矩阵视为一维有序数组处理,通过数学计算转换索引(mid索引对应行号为mid/列数,列号为mid%列数)。时间复杂度为O(log(m×n)),空间复杂度O(1)。核心思路是结合矩阵的全局有序性,直接应用二分搜索算法。
2025-07-11 07:00:00
411
空空如也
在学习 Spring Boot 期间,常见的问题
2024-08-13
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅