- 博客(16)
- 收藏
- 关注
原创 LeetCodeHot100 236.二叉树的最近公共祖先
本文介绍了在二叉树中寻找两个节点p和q的最近公共祖先(LCA)的算法思路和实现。主要方法是通过深度优先搜索(DFS)分别记录从根节点到p和q的路径,然后比较两条路径找到最后一个相同的节点。文章解答了两个关键问题:1)为什么本题DFS需要回溯(因为需要记录完整路径);2)不同容器类型的操作方法选择。提供的C++代码实现了该算法,通过递归DFS搜索并回溯记录路径,最后比较路径找出LCA。该解法时间复杂度为O(n),空间复杂度为O(n)。
2026-05-29 18:35:32
186
原创 LeetCodHot100 19.删除链表的倒数第N个结点 思路&C++代码
本文介绍了一种删除链表倒数第n个节点的双指针解法。首先创建虚拟头节点dummy,初始化left指向dummy,right指向head。让right先移动n步,使两指针间隔n个节点。然后同时移动left和right直到right为空,此时left.next即为要删除的节点。最后通过left.next = left.next.next完成删除,返回dummy.next。该方法时间复杂度O(n),空间复杂度O(1),只需一次遍历即可高效解决问题。
2026-05-26 16:04:27
30
原创 LeetCodeHot100 438.找到字符串中所有字母异位词 C++代码
这篇文章介绍了一个使用滑动窗口算法在字符串s中查找所有p的字母异位词起始位置的解决方案。核心思路是通过两个哈希表分别统计p的字符频率和当前窗口的字符频率,当窗口大小等于p长度时比较频率是否一致。主要步骤包括:初始化p的字符频率表,用双指针维护滑动窗口,当窗口字符频率与p完全匹配时记录起始位置,遇到无效字符时重置窗口。该算法时间复杂度为O(n),空间复杂度为O(1),适用于处理字符串匹配问题。
2026-05-16 16:23:50
190
原创 LeetCodeHot100 2. 两数相加 思路&JS代码&C++代码
摘要:本文介绍了链表相加的算法思路,通过创建虚拟链表存储结果,使用进位变量carry处理相加过程中的进位问题。算法遍历两个链表节点,计算对应位之和加上进位值,取余得到当前位结果,取整更新进位值。当任一链表未遍历完或仍有进位时继续计算,最终返回虚拟链表的下一个节点作为结果。
2026-04-19 15:03:18
211
原创 LeetCodeHot100 21. 合并两个有序链表 思路&JavaScript版本代码
本文介绍了使用虚拟链表合并两个有序链表的方法。关键点包括:1)创建一个虚拟头节点newlist作为起始点;2)使用tail指针始终指向链表末尾;3)比较两个链表的节点值,将较小值连接到tail后;4)当一个链表遍历完后,将另一个链表剩余部分直接连接;5)最终返回newlist.next以跳过虚拟头节点。这种方法通过虚拟节点简化了链表操作,避免了空指针异常,时间复杂度为O(n),空间复杂度为O(1)。
2026-04-19 14:39:42
51
原创 LeetCodeHot100 239.滑动窗口最大值 暴力解法&单调队列 完整代码&解析&知识点回顾
本文探讨了滑动窗口最大值问题的两种解法。暴力解法通过遍历数组,对每个窗口使用Math.max求最大值,时间复杂度为O(nk)。更优解采用单调队列思想,维护一个存储下标的队列,保证队列元素单调递减,通过比较新元素与队尾元素来维护队列性质,最终时间复杂度优化至O(n)。文章详细分析了两种解法的实现细节,包括数组操作、边界条件处理等,并强调了变量命名、区间边界等易错点。单调队列解法通过动态维护窗口内的最大值,显著提升了算法效率。
2026-04-07 17:45:22
370
原创 LeetCodeHot100 11.盛最多水的容器 JavaScript版本解析&代码
本文介绍了解决盛水容器问题的两种方法:暴力解法和双指针优化解法。暴力解法使用双重循环计算所有可能的容器面积,虽然正确但效率低下导致超时。优化后的双指针解法通过左右指针向中间移动的策略,每次移动较矮的柱子指针,只需O(n)时间复杂度即可找到最大面积。该方法巧妙地利用容器高度由较矮柱子决定的特性,显著提升了计算效率,是处理此类问题的经典优化方案。
2026-04-03 22:43:55
57
原创 LeetCodeHot100 128.最长连续序列 哈希表法 C++详细解析
本文介绍了使用哈希表法解决最长连续序列问题的C++实现。通过unordered_set存储数组元素实现快速查找,核心思路是判断每个元素是否为连续序列的起点:若前驱元素不存在,则作为起点向后查找连续序列长度。时间复杂度优化为O(n),相比暴力法显著提升效率。代码解析部分详细说明了哈希表选择、元素遍历、序列起点判断等关键步骤的实现原理,并对比了unordered_map与unordered_set的区别、emplace与insert的差异等基础知识。该解法通过避免重复计算,高效地找到最长连续序列长度。
2026-02-25 20:41:13
618
原创 LeetCodeHot100 49.字母异位词分组 C++解析 哈希表法
该算法通过特征码分组解决字母异位词问题。对每个字符串统计字母频率生成26位特征码,利用哈希表将相同特征码的字符串分组。遍历时使用引用提高效率,最终输出哈希表中所有分组。时间复杂度主要取决于字符串长度和数量,空间复杂度为O(n)。关键点在于特征码的生成和哈希表的运用,有效实现了字母异位词的识别和分组。
2026-02-24 19:34:46
759
原创 LeetCodeHot100 1.两数之和 暴力法&哈希表法 C++解析
本文介绍了LeetCode两数之和问题的两种解法:暴力法和哈希表法。暴力法通过两层循环遍历数组,时间复杂度O(n²)。哈希表法利用unordered_map存储元素及其下标,通过一次遍历实现查找,时间复杂度优化至O(n)。重点解析了哈希表的核心概念、C++实现语法(unordered_map<int,int>)及count()函数的使用。两种方法对比显示哈希表法显著提升了运行效率,适合处理大规模数据。文章还纠正了初学者常见错误(如size()的调用方式),并强调了vector在算法题中的重要性。
2026-02-24 17:12:18
272
原创 洛谷P1002 [NOIP 2002 普及组] 过河卒(python代码&超详细解析)蓝桥杯动态规划
如果马的位置为图中的C点,那么它的控制区域其实是Pi(i=1,2,3,3,4,5,7,8),即图中红框圈出来的点,理解了这一点,我们假设C的坐标为(0,0),那么控制的点的相对坐标也就很好表示出来了,由于。对于二维数组,写两层循环,如果某个坐标值为True,代表被马控制,跳过;1.我们从(0,0)走到(n,m)共n+1行,m+1列,所以初始化列表的时候不要忘记加一。,至于其他的初始化不再赘述,方法同上方棋盘初始化一样,起点标记较为简单,这里也省略。这一步需要对象棋有一定的理解或者仔细挖掘题目的含义。
2025-04-16 22:32:07
542
原创 洛谷P1001 A+B Problem(python代码&超详细解析)
接受两个参数,第一个是函数,第二个是序列,功能是将函数作用到序列的每一个元素,在python3里,会将结果返回为一个迭代器。注意:这里的以逗号隔开是指:检测我从键盘输入的数值时,根据逗号来分割,辨别我输入的数值,如果我输入123,显然检测不到逗号,结果就会报错,因此我们回到最初的代码,还要注意,如果。我们发现只是简单的字符串的叠加,所以为了得到1+2=3的效果,必须进行类型转换,而int可以很好地转换为数字进行计算。如果不进行强制类型转换,那将是简单的两个字符串的叠加,例如。split:拆分字符串,用于。
2025-04-15 22:35:39
697
原创 洛谷B2025 输出字符菱形:用 * 构造一个对角线长 5 个字符,倾斜放置的菱形(python代码和分析)
我们将整个输出的字符分为两部分来分析,以最长的一行为界限,分别为前三行以及后两行,对于每一部分,都由空格和星号来表示,因此分别记为space(这里的space是出现在star前的空格数量,例如第一行,星号前有2个空格,因此第一行的psace为2)和star,并进行找规律。首先对于前三行,我们写一个循环,假设为1~3行,观察发现对于第i行,space和star的数量如下,写一个简单的循环并打印输出。最终写出完整代码输出,运行成功!
2025-04-14 12:16:00
354
原创 C语言写猜数字游戏
用C语言写猜数字游戏,要求:有进入及退出程序的主菜单,游戏中能 生成100到200之间的随机数,通过与用户输入比较大小直至猜对,并同时输出猜测次数。
2024-02-04 12:38:40
599
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅