自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode114.二叉树展开为链表

本文介绍了两种将二叉树展开为链表的算法。方法一采用前序遍历递归收集所有节点,然后重新连接成右链表结构,时间复杂度O(n),空间复杂度O(n)。方法二使用Morris遍历思想,通过修改指针原地展开,时间复杂度O(n),空间复杂度O(1)。两种方法都能实现二叉树的链表化展开,但方法二在空间效率上更优。

2026-08-18 16:28:49 18

原创 LeetCode15.三数之和

这段代码实现了求解三数之和(ThreeSum)的算法。首先对数组排序,然后使用三重循环(外层固定一个数,内层双指针)寻找三个数的和为0的组合。关键优化包括:跳过重复元素(避免重复解)、当固定数大于0时提前终止(因为数组已排序)、使用双指针减少时间复杂度(从O(n^3)降到O(n^2))。算法最终返回所有不重复的三元组集合,满足a + b + c = 0的条件。

2026-08-16 15:05:49 18

原创 LeetCode3.无重复字符的最长子串

这篇文章介绍了一个解决最长无重复字符子串问题的C#代码实现。使用滑动窗口算法,通过维护一个哈希集合和左右指针,在O(n)时间复杂度内找到结果。核心思想是:当遇到重复字符时移动左指针并移除对应字符,始终保持窗口内字符唯一,同时记录最大窗口长度。该解法空间复杂度为O(1)(字符集大小固定),能高效处理字符串遍历问题。

2026-08-13 10:04:19 20

原创 LeetCode455.分发饼干

这两段代码都实现了贪心算法来解决"分发饼干"问题,思路相同但变量命名和循环方式不同。它们都先对孩子的胃口值(g)和饼干尺寸(s)进行排序,然后从最大的饼干开始匹配能满足的最大胃口孩子。第一段代码使用for循环遍历孩子数组,第二段使用while循环同时遍历两个数组。两种实现都通过双指针从后向前遍历,统计能满足的孩子数量,最终返回结果。由于算法逻辑一致,两种写法的运行结果相同。时间复杂度均为O(nlogn)(排序占主导),空间复杂度O(1)。

2026-08-12 20:26:01 17

原创 LeetCode209.长度最小的子数组

这段C#代码实现了一个滑动窗口算法,用于寻找数组中和≥target的最短连续子数组。通过维护左右指针(i,j)和窗口内元素和(sum),当sum≥target时记录当前窗口长度,并移动左指针缩小窗口。最终返回最小窗口长度,若无解则返回0。算法时间复杂度为O(n),空间复杂度O(1),是解决此类问题的经典高效方案。

2026-08-12 18:46:17 26

原创 LeetCode228.汇总区间

该代码实现了一个SummaryRanges方法,用于将有序整数数组转换为区间列表。算法遍历数组,将连续数字分组为区间(如1,2,3变为"1->3"),非连续数字单独列出。使用临时列表存储当前连续序列,当序列中断时生成区间字符串并重置临时列表。最后返回包含所有区间的字符串集合,时间复杂度为O(n)。

2026-08-06 11:07:06 16

原创 LeetCode206.反转链表

本文展示了三种反转链表的算法实现:1)栈遍历法利用栈存储节点并重构指针关系;2)双指针法通过前驱和当前节点同步移动直接反转;3)递归法通过递归调用实现指针反向。三种方法均能正确反转链表,其中双指针法空间复杂度最优(O(1)),递归法代码最简洁但存在栈溢出风险,栈实现则需额外O(n)空间。不同场景下可根据需求选择实现方式。

2026-07-31 16:31:18 40

原创 LeetCode114/94/145. 二叉树的前序/中序/后序遍历

本文展示了二叉树三种遍历方式的C#实现:1)前序遍历使用递归,按根-左-右顺序访问节点;2)中序遍历提供递归和迭代两种方法,递归按左-根-右顺序,迭代使用栈模拟递归过程;3)后序遍历采用递归,按左-右-根顺序访问。所有方法都返回节点值的列表,递归法直接修改成员列表,迭代法通过栈处理左子树,再转向右子树。代码简洁,体现了不同遍历的核心逻辑。

2026-07-28 16:13:57 45

原创 LeetCode106.相交链表

本文提供了查找两个链表交点的哈希集合解法。通过使用HashSet存储链表A的所有节点,然后遍历链表B检查是否存在重复节点,第一个重复节点即为交点。代码实现清晰,时间复杂度为O(m+n),空间复杂度为O(n)。该方法利用哈希表的快速查找特性,有效解决了链表交点检测问题。

2026-03-07 02:01:33 38

原创 LeetCode27. 移除元素

本文介绍了两种移除数组中指定元素的方法。第一种暴力解法先统计非目标元素数量,再通过双重循环移动元素,时间复杂度较高。第二种双指针解法通过快慢指针遍历数组,将非目标元素前移,效率更高。两种方法都能正确返回移除后数组的新长度,但双指针解法更为简洁高效。

2025-12-15 09:09:39 244

原创 LeetCode35. 搜索插入位置

这段代码实现了一个二分查找算法,用于在有序数组中查找目标值或确定其插入位置。算法通过维护左右指针逐步缩小搜索范围,处理了目标值在数组边界、中间位置以及不存在的情况。当目标值小于所有元素时返回0,大于时返回合适位置,找到相等值时直接返回索引。代码逻辑清晰,但边界条件处理可能存在优化空间。

2025-12-09 13:45:56 226

原创 LeetCode704. 二分查找

这段代码实现了一个二分查找算法,用于在有序数组中查找目标值。通过维护左右指针逐步缩小搜索范围,最终返回目标值的索引或-1(未找到)。时间复杂度为O(log n),空间复杂度为O(1)。提交记录显示该实现已通过测试,能够正确处理边界情况和空数组输入。

2025-12-07 20:10:13 184

原创 LeetCode242. 有效的字母异位词

摘要:该代码实现了一个判断两个字符串是否为字母异位词的方法。通过将字符串转换为列表,逐个检查目标字符串字符是否存在于基础字符串中并移除匹配项。若全部匹配且最终基础列表为空,则返回true,否则返回false。该方法通过字符匹配和移除操作验证字符串的字母组成是否相同。

2025-12-07 20:06:42 159

原创 LeetCode141.环形链表

摘要:本文提供了两种检测链表环的解法。解法一使用HashSet查重,通过遍历链表并将节点存入集合,若遇到重复节点则判定存在环。解法二采用快慢指针,快指针每次移动两步,慢指针每次移动一步,若两者相遇则说明存在环。两种方法均能有效检测链表环,其中HashSet解法空间复杂度较高,而快慢指针解法空间复杂度更低。两种解法均给出了完整代码实现。

2025-11-24 12:26:11 225

原创 LeetCode61.旋转链表

这段代码实现了链表右旋转功能。通过遍历链表将所有节点存入列表,计算实际旋转次数k后,将链表首尾相连形成环,然后找到新的头节点和尾节点断开环,最终返回旋转后的链表。处理了空链表和旋转次数为0的特殊情况,时间复杂度O(n),空间复杂度O(n)。

2025-11-24 00:01:11 176

原创 LeetCode151.反转字符串中的单词

本文提供了两种反转字符串中单词顺序的解法。解法一使用库函数,通过Split分割字符串后倒序拼接;解法二不使用库函数,采用栈结构处理单词顺序反转。两种方法都考虑了空格处理问题,解法一通过移除空元素,解法二通过标记位控制入栈时机。两种方案均能正确实现单词顺序反转功能,但解法二更注重底层实现,避免了直接使用字符串分割函数。

2025-11-23 01:48:07 337

原创 LeetCode290.单词规律

该代码实现了一个字符串模式匹配算法,判断给定的字符串s是否遵循pattern的模式。算法首先将字符串s分割成单词列表,然后使用字典建立字符到单词的映射关系。通过遍历pattern和单词列表,检查是否存在双向一致的映射关系。若长度不匹配或映射关系不一致则返回false,否则返回true。该算法确保了字符和单词之间的一一对应关系。

2025-11-23 00:11:20 192

原创 2025传智杯程序设计赛道初赛第一场 · 完成记录

本文分析了四个编程题目的实现与测试结果:1)药品功效计算(运行超时),2)蛇吃果实长度计算(通过),3)资源锁定状态统计(运行超时),4)二进制字符串转换(通过)。其中第二题和第四题成功通过测试,而第一题和第三题由于算法效率问题导致运行超时。建议对超时题目进行算法优化,如使用更高效的数据结构或减少循环嵌套。所有题目自测均通过,说明基础逻辑正确但需改进性能。

2025-11-22 18:41:19 727

原创 LeetCode70.爬楼梯

这段C#代码实现了一个动态规划算法来计算爬楼梯问题的解。方法ClimbStairs接收楼梯阶数n作为参数,使用列表dp存储中间结果,初始化前三个值(1,1,2)。通过循环从第3阶开始计算每阶的可能方式(等于前两阶方式之和),最终返回第n阶的结果。该算法以O(n)时间复杂度和O(n)空间复杂度高效解决问题。

2025-11-22 00:00:14 182

原创 LeetCode392.判断子序列

这段C#代码实现了一个判断子序列的函数IsSubsequence。它通过双指针法遍历字符串s和t,当s为空时直接返回true。主要逻辑是比较两个字符串的字符,当匹配时移动s的指针,若s指针遍历完则返回true,否则返回false。该算法时间复杂度为O(n),空间复杂度为O(1)。

2025-11-21 19:45:22 145

原创 LeetCode155.最小栈

本文实现了一个最小栈(MinStack)数据结构,使用两个栈分别存储元素和最小值序列。主栈保存所有元素,辅助栈记录每个操作后的最小值状态:压栈时若新元素小于当前最小值则更新,否则复制原最小值;弹栈时同步移除两个栈顶元素。该设计保证能在O(1)时间内获取当前栈中的最小值,空间复杂度为O(n)。核心思路是通过辅助栈维护最小值变化历史,实现高效的最小值查询功能。

2025-11-21 14:12:19 223

原创 LeetCode189.轮转数组

摘要:文章展示了两种数组旋转解法。解法一使用队列实现:先将数组逆序存入队列,然后进行k次队首出队再入队操作,最后将队列元素倒序放回数组。该方法通过队列的FIFO特性实现旋转,但可能存在效率问题。解法二未给出具体实现,暗示可能有更优解。两种方法对比展现了不同思路解决数组旋转问题。

2025-11-20 20:53:09 242

原创 LeetCode88.合并两个有序数组

该方法通过双指针合并两个有序数组。使用两个指针分别遍历nums1和nums2的有效元素,比较当前元素大小,将较小值存入临时列表。遍历完成后,将列表元素依次复制回nums1。时间复杂度O(m+n),空间复杂度O(m+n)。该方法思路清晰,但使用了额外空间存储中间结果。

2025-11-19 22:50:55 133

原创 LeetCode347.前K个高频元素

本文提出一种基于字典统计的Top K频繁元素算法。首先创建字典记录每个元素出现次数,然后通过k次遍历,每次找出当前出现次数最多的元素,将其加入结果数组并从字典移除。该方法时间复杂度为O(nk),空间复杂度为O(n),适用于较小k值场景。虽然实现简单直观,但当k较大时效率可能不足,后续可考虑优化使用堆结构来提高性能。

2025-11-16 01:08:45 249

原创 LeetCode20.有效的括号

摘要:本文实现了一个检查字符串中括号匹配有效性的算法。使用栈数据结构存储左括号,遇到右括号时弹出栈顶元素并进行匹配检查。若栈为空且所有括号正确匹配则返回true,否则返回false。时间复杂度O(n),空间复杂度O(n)。

2025-11-16 00:03:31 158

原创 LeetCode75.颜色分类

该摘要描述了一个解决颜色分类问题的算法。采用计数排序思想,先统计红(0)、白(1)、蓝(2)三种颜色的出现次数,然后通过两趟遍历数组:第一趟统计各颜色数量,第二趟按顺序填充颜色值。算法时间复杂度为O(n),空间复杂度O(1)。提交记录显示该方法已通过测试。

2025-11-15 23:07:28 221

原创 LeetCode19.删除链表的倒数第N个节点

该代码实现了一个从链表末尾删除第N个节点的算法。使用栈结构存储链表节点,遍历链表后将所有节点压栈。然后依次弹出栈顶元素,当遇到第N个节点时记录其前驱节点。最后根据前驱节点情况调整链表指针完成删除操作。若删除的是头节点则直接返回第二个节点,时间复杂度为O(n),空间复杂度为O(n)。算法通过栈的先进后出特性实现了从末尾计数的效果。

2025-11-13 19:27:39 180

原创 LeetCode283.移动零

文章摘要:作者分享了一个暴力解法实现移动零问题的代码,通过双重循环遍历数组,遇到零时与后续非零元素交换。虽然该方法能解决问题,但作者自嘲效率低下(时间复杂度O(n²)),展示了初学者的典型解决思路。代码使用C#实现,核心逻辑是外层循环定位零元素,内层循环寻找可交换的非零元素。该解法体现了新手面对简单问题时可能采取的直接但不够优化的策略。

2025-11-10 18:16:15 163

原创 LeetCode21.合并两个有序链表

摘要:该算法通过同时遍历两个有序链表(list1和list2),比较节点值并将较小值依次复制到新链表(answer)中。使用指针ptr跟踪新链表当前位置。当任一链表未遍历完时循环:若两链表都有节点,比较取较小值;若仅剩一个链表,直接复制剩余节点。每次循环后更新相应链表指针,必要时为ptr新建节点空间。最终返回合并后的有序链表。时间复杂度O(m+n),空间复杂度O(m+n)。

2025-11-10 16:02:37 182

原创 LeetCode8.字符串转换整数

该算法实现字符串转整数的功能。主要流程:1)初始化状态变量;2)遍历字符串:处理前导空格,识别正负号,收集有效数字;3)处理结果:若无有效数字返回0,能正常转换则返回结果,溢出时返回int极值。通过状态机(isReading)区分不同处理阶段,使用StringBuilder收集数字字符,最后尝试解析并处理边界情况。时间复杂度O(n),空间复杂度O(n)。

2025-11-09 21:24:12 157

原创 LeetCode2169.得到0的操作数

【代码】LeetCode2169.得到0的操作数。

2025-11-09 01:43:23 143

原创 LeetCode66.加一(个人解法)

倒序遍历数组的每个元素,如果其元素+1小于等于9则直接对元素+1,后续就不需+1并且可以终止循环,否则将元素置为0并继续循环。循环结束后如果仍需+1则进行额外处理:这里需要向数组最前位加入1,使用数组转List>List插入值>List转数组即可解决。

2025-11-07 23:14:25 246

原创 LeetCode2.两数相加(个人解法)

/初始化CalcuInfo的长度,长度需要以更长队列的长度+1(因为如果最末尾需要进位,则需要多存储一次进位信息)= queue2.Count) shorter.Enqueue(0);将两份数据存储进队列 > 同时取出两队列的数据,每次判断是否需要进位并将数据相加 > 将得出结果依次插入文本的最前部 > 倒序遍历结果文本,返回结果。= queue2.Count)//如果两个队列的长度不同,//结果节点(结果链表的头节点)if (i == CalcuInfo.Count - 1)//边界处理。

2025-11-07 17:16:21 692

空空如也

空空如也

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

TA关注的人

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