- 博客(313)
- 资源 (1)
- 收藏
- 关注
原创 LeetCode第267题_回文排列II
本文详细解析LeetCode第267题"回文排列 II",这是一道回溯算法的中等难度问题。文章提供了从基础回文判断到高效回溯生成的完整解法思路,包含多种语言实现,配有详细的回溯过程图解和去重技巧分析。适合想要深入理解回溯算法和字符串处理的算法学习者。
2025-06-15 02:00:00
690
原创 LeetCode第266题_回文排列
本文详细解析LeetCode第266题"回文排列",这是一道字符串哈希表问题。文章提供了从基础哈希表到位运算的多种优化解法,包含C#、Python、C++三种语言实现,配有详细的回文特性分析图解和性能对比。适合字符串算法学习者和哈希表应用练习者。
2025-06-15 01:00:00
458
原创 LeetCode第265题_粉刷房子II
本文详细解析LeetCode第265题"粉刷房子 II",这是一道困难的动态规划优化问题。文章提供了从普通DP到O(1)空间优化的完整解法演进,包含多种语言实现,配有详细的优化过程图解和性能分析。适合想要深入理解动态规划优化技巧的高级算法学习者。
2025-06-14 02:00:00
937
原创 LeetCode第264题_丑数II
本文详细解析LeetCode第264题"丑数 II",这是一道动态规划问题。文章提供了从暴力解法到动态规划的完整思路演进,包含C#、Python、C++三种语言实现,配有详细的三指针技术图解和性能分析。适合想要深入理解动态规划和指针技巧的算法学习者。
2025-06-14 01:00:00
1063
原创 LeetCode第263题_丑数
本文详细解析LeetCode第263题"丑数",这是一道数学问题。文章提供了简洁高效的除法判断解法,包含C#、Python、C++、JavaScript四种语言实现,配有详细的算法步骤图解和性能分析。适合算法初学者和想要掌握基础数学算法的开发者。
2025-06-12 02:00:00
1646
原创 LeetCode第262题_行程和用户
本文详细解析LeetCode第262题"行程和用户",这是一道SQL数据库问题。文章提供了多种SQL解法,包含JOIN、子查询等多种实现方式,配有详细的查询步骤图解和性能分析。适合想要提升SQL查询技能和数据库操作能力的开发者
2025-06-12 01:00:00
858
原创 LeetCode第261题_以图判树
本文详细解析LeetCode第261题"以图判树",这是一道图论问题。文章提供了从DFS到并查集的多种解法,包含C#、Python、C++三种语言实现,配有详细的算法步骤图解和性能分析。适合想要深入理解图论算法和树的性质的算法学习者。
2025-06-11 02:00:00
2181
原创 LeetCode第260题_只出现一次的数字III
本文详细解析LeetCode第260题"只出现一次的数字 III",这是一道位运算问题。文章提供了从基础哈希表到高级位运算的完整思路演进,包含C#、Python、C++三种语言实现,配有详细的位运算原理图解和性能分析。适合想要深入理解位运算技巧的算法学习者。
2025-06-11 01:00:00
1445
原创 LeetCode第259题_较小的三数之和
这篇LeetCode题目解析摘要:LeetCode第259题要求统计数组中三数之和小于目标值的组合数量。解题核心是排序加双指针法:首先排序数组,然后固定一个元素,使用双指针遍历剩余元素。当找到满足条件的三元组时,通过计算指针间距一次性统计所有符合条件的组合。这种方法将时间复杂度从O(n³)优化至O(n²)。文章提供了C#、Python和C++三种实现代码,分析了暴力法与双指针法的优劣,并指出常见错误如未排序数组、边界条件处理不当等。相关题目包括三数之和、最接近的三数之和等变种问题。
2025-06-10 02:00:00
725
原创 LeetCode第258题_各位相加
LeetCode第258题要求将一个非负整数反复进行各位相加,直到结果为一位数。文章提供了两种解法:一是直观的模拟法,通过循环计算数字各位之和;二是高效的数学方法,利用数字根公式(num-1)%9+1实现O(1)时间复杂度。代码示例展示了C#、Python和C++的实现,性能对比表明数学方法更优。文章还分析了常见错误、解法优劣以及相关题目,帮助读者全面理解该问题。(字数:148)
2025-06-10 01:00:00
911
原创 LeetCode第257题_二叉树的所有路径
摘要LeetCode第257题"二叉树的所有路径"要求返回从根节点到所有叶子节点的路径。题目采用递归深度优先搜索(DFS)方法,遍历二叉树时记录路径,当遇到叶子节点时保存完整路径。时间复杂度O(n),空间复杂度O(h)。此外也可用广度优先搜索(BFS)迭代实现。代码示例提供了C#、Python和C++实现,均通过测试用例。
2025-06-09 02:00:00
1969
原创 LeetCode第256题_粉刷房子
LeetCode 256题"粉刷房子"要求相邻房子颜色不同且总成本最低。采用动态规划解法,定义dp[i][j]为粉刷前i个房子且第i个房子用颜色j的最小花费。状态转移方程为:当前房子选某颜色的成本加上前一个房子选其他颜色的最小成本。优化空间复杂度至O(1)只需三个变量。示例中,对于输入[[17,2,17],[16,16,5],[14,3,19]],最优解为10(2+5+3)。代码实现展示了C#、Python和C++版本,均以O(n)时间、O(1)空间完成。关键点在于正确设计状态转移方程,避免相邻同色并选择最
2025-06-09 01:00:00
1635
原创 LeetCode第255题_验证前序遍历序列二叉搜索树
摘要LeetCode第255题要求验证一个整数数组是否为二叉搜索树的前序遍历序列。二叉搜索树的特点是左子树节点值小于根节点,右子树节点值大于根节点。题目提供了两种主要解法:1) 递归方法,通过设定有效范围逐层验证子树;2) 单调栈法,利用栈结构模拟前序遍历过程。两种方法的时间复杂度均为O(n),但单调栈法的空间复杂度更优。代码示例展示了C#和Python的实现,包括递归验证和栈优化版本。题目难度中等,考察对二叉搜索树性质和前序遍历的理解与应用。
2025-06-08 02:00:00
1519
原创 LeetCode第254题_因子的组合
LeetCode第254题要求找出给定整数n的所有因子组合,其中因子必须大于1且小于n,组合按非降序排列且不重复。可以使用回溯法解决,从最小因子2开始递归分解剩余数,通过限制因子范围和确保非降序来避免重复。例如n=12的输出是[[2,6], [2,2,3], [3,4]]。该方法时间复杂度约为O(2^(log n)),空间复杂度O(log n)。关键点在于回溯过程中保持因子递增顺序并适当剪枝优化。
2025-06-08 01:00:00
1814
原创 LeetCode第253题_会议室II
摘要LeetCode第253题"会议室II"要求计算安排给定会议列表所需的最少会议室数量。题目给定每个会议的起始和结束时间,要求避免时间冲突。两种主要解法:1)扫描线算法:分离并排序会议的开始和结束时间,通过双指针遍历比较时间点,记录同时进行的会议最大数量;2)优先队列(最小堆):按会议开始时间排序,使用最小堆跟踪最早结束会议,移除结束的会议后添加新会议,堆大小即为所需会议室数。两种方法时间复杂度均为O(n log n),空间复杂度O(n)。该问题属于经典的区间调度问题,有助于理解时间管理算法。
2025-06-07 02:00:00
1415
原创 LeetCode第252题_会议室
摘要:LeetCode第252题要求判断一个人是否能参加所有给定的会议(无时间重叠)。核心解法是先将会议按开始时间排序,然后遍历检查相邻会议是否存在重叠(当前会议开始时间小于前一个会议的结束时间)。若发现重叠则返回false,否则遍历完后返回true。该方法时间复杂度为O(n log n),空间复杂度为O(1)。文章提供了C#、Python和C++三种语言的代码实现,并对比了性能表现(C++最优)。关键点在于正确排序和相邻会议的重叠判断,常见错误包括未排序或判断条件错误。该解法简洁高效,适用于类似区间问题
2025-06-07 01:00:00
1079
原创 LeetCode第251题_展平二维向量
LeetCode第251题要求设计一个迭代器来展平二维向量,支持next()和hasNext()操作。使用双索引法(行和列)追踪当前位置,在hasNext()中跳过空行,next()返回当前元素并移动指针。时间复杂度均摊O(1),空间复杂度O(1)。代码实现提供C#、Python和C++版本,核心思路是通过辅助方法处理空向量情况,确保高效遍历。
2025-06-06 02:00:00
1104
原创 LeetCode第250题_统计同值子树
摘要:LeetCode第250题要求统计二叉树中同值子树的个数(子树所有节点值相同)。采用后序遍历方法,从叶子节点开始判断,逐步向上验证。关键条件是:当前节点值必须与其子节点值相同(若存在),且左右子树都是同值子树。实现时,递归检查这些条件,满足则计数器加1。时间复杂度O(n),空间复杂度O(n)(最坏情况)。提供C#、Python和C++三种代码实现,核心思路统一:通过递归函数返回子树是否同值,并在符合条件时累加计数。
2025-06-06 01:00:00
731
原创 LeetCode第249题_移位字符串分组
摘要:LeetCode第249题要求将字符串列表中的移位字符串分组。移位字符串是指通过相同字母移位得到的字符串。解题关键是通过计算相邻字符的差值序列(模26处理循环),并使用哈希表分组。时间复杂度O(nm),空间复杂度O(nm)。代码实现了C#、Python和C++版本,亮点包括循环处理、哈希表分组和边界情况处理。类似题目包括字母异位词分组等。
2025-06-05 02:30:00
676
原创 LeetCode第248题_特殊的回文数III
LeetCode 248题要求统计给定范围内[low, high]的特殊回文数数量。特殊回文数是指旋转180度后仍然相同的数字,仅包含0、1、6、8、9这些数字。解题思路是通过递归生成所有可能的特殊回文数,然后检查它们是否在指定范围内。关键点在于:奇数长度时中间只能放0、1、8;偶数长度时数字需成对出现;且不能以0开头。代码实现展示了C#、Python和C++三种语言的解决方案,均采用递归生成所有可能数字后进行比较和计数。
2025-06-05 01:30:00
697
原创 LeetCode第247题_中心对称数II
摘要:LeetCode第247题要求生成长度为n的所有中心对称数(旋转180°后仍相同的数字)。中心对称数由数字对(0,0)、(1,1)、(8,8)、(6,9)、(9,6)构成,且不能以0开头(除非n=1)。通过递归解决:基本情况:n=0返回空字符串,n=1返回["0","1","8"];递归步骤:对n-2长度的结果,在外围添加合法数字对,最外层排除"0"开头。复杂度:时间与空间均为O(5^(n/2))。代码(C#/Python/C++)利用递归分层处理,确保数字有效性。优化方向包括迭代实现或生成
2025-06-04 03:00:00
947
原创 LeetCode第246题_中心对称数
本文介绍了LeetCode第246题"中心对称数"的解题思路和代码实现。中心对称数是指旋转180度后依然相同的数字,如69、88。解题关键在于建立数字旋转后的映射关系(0→0,1→1,6→9,8→8,9→6),然后使用双指针法从两端向中间检查每对数字是否满足映射条件。文章提供了C#、Python和C++三种语言的实现代码,并分析了算法的时间复杂度为O(n),空间复杂度为O(1)。该方法高效且简洁,适用于类似数字验证问题。
2025-06-04 02:00:00
485
原创 LeetCode第245题_最短单词距离III
LeetCode 245题是求单词列表中最短单词距离的变种,允许两个单词相同。关键在于区分两种场景:当word1和word2不同时,解法类似243题;当相同时,则需计算同一单词不同出现位置的最小间距。双指针法是高效解法,遍历时分别记录位置并动态更新最小距离。时间复杂度O(n),空间复杂度O(1)。另一种解法是先收集所有位置再比较,适用于多次查询场景。该题考查对边界条件的处理能力。
2025-06-03 21:36:41
1010
原创 LeetCode第244题_最短单词距离II
摘要:LeetCode第244题要求设计一个类,计算单词数组中两个不同单词的最短距离。关键是在初始化时预处理单词位置,存储每个单词的所有出现索引。计算最短距离时,比较两单词的位置列表,寻找最小差值。可采用双指针优化,降低时间复杂度。文章提供了C#、Python和C++的实现代码,分别展示了预处理索引和双指针两种方法。该问题适用于处理需要多次查询的单词距离计算场景。
2025-06-03 21:35:50
1691
原创 LeetCode第243题_最短单词距离
LeetCode第243题要求计算给定数组中两个不同单词之间的最短距离。解题方法包括暴力法和一次遍历法。暴力法记录所有出现位置后计算最小距离,而更高效的一次遍历法在遍历时实时更新最近位置并计算距离。代码提供了C#、Python和C++三种语言的实现,其中一次遍历法通过维护两个指针来优化性能,时间复杂度为O(n),空间复杂度为O(1)。此题为简单难度,主要考察数组遍历和最小距离计算能力。
2025-06-02 02:00:00
1193
原创 LeetCode第242题_有效的字母异位词
LeetCode第242题要求判断两个字符串是否为字母异位词(字符相同但顺序不同)。摘要介绍了两种解法:1)排序比较法(O(n log n)时间复杂度);2)更高效的哈希表计数法(O(n)时间复杂度),使用26位数组统计小写字母频率。文章提供了C#、Python、C++实现代码,分析了性能差异,并给出处理Unicode字符的进阶方案。关键点包括:先检查字符串长度、准确统计字符频率、注意大小写敏感性。相关题目包括字母异位词分组等。
2025-06-02 01:00:00
942
原创 LeetCode第241题_为运算表达式设计优先级
LeetCode第241题要求为包含数字和运算符(+、-、*)的表达式设计不同优先级组合,返回所有可能的计算结果。解题思路采用分治法,通过递归将表达式按运算符分为左右两部分,分别计算所有可能值后再组合结果。代码实现展示了C#、Python和C++版本,核心都是遍历运算符,递归处理子表达式,最后组合结果。当表达式仅为数字时直接返回其整数值。该方法有效解决了不同优先级组合导致的多解问题,时间复杂度取决于运算符数量和排列组合情况。
2025-06-01 02:00:00
1093
原创 LeetCode第240题_搜索二维矩阵II
这道题要求在具有行列有序特性的二维矩阵中高效搜索目标值。最优解法是从右上角或左下角开始搜索,利用矩阵的双向有序特性,通过逐步排除行或列来缩小搜索范围,时间复杂度为O(m+n)。代码实现简洁,C++版本性能最佳。解题关键在于正确选择搜索起点,避免暴力搜索和无效遍历。相关题目包括搜索严格有序矩阵、查找矩阵中第K小元素等,都利用了类似的行列有序特性进行优化。
2025-06-01 01:00:00
921
原创 LeetCode第239题_滑动窗口最大值
LeetCode第239题要求找出滑动窗口中的最大值。题目给定数组和窗口大小k,随着窗口右移,返回每个窗口的最大值。解题方法包括优先队列(O(nlogk)时间)和更优的单调队列(O(n)时间)。单调队列通过维护递减序列,队首即为当前窗口最大值。Python和C#代码实现了这两种方法,优先队列适合小k值,而单调队列效率更高,是推荐解法。
2025-05-31 02:00:00
1287
原创 LeetCode第238题_除自身以外数组的乘积
LeetCode第238题要求计算数组中每个元素除自身外的乘积。题目要求不使用除法且在O(n)时间内完成。解题方法:左右乘积列表法:分别计算每个元素左侧和右侧的乘积,然后相乘得到结果,时间复杂度O(n),空间复杂度O(n)。空间优化法:在输出数组中先存储左侧乘积,再用变量记录右侧乘积并直接更新结果,时间复杂度O(n),空间复杂度O(1)(不包括输出数组)。关键点:避免使用除法两次遍历数组(左→右和右→左)空间优化方法仅需一个额外变量两种方法在时间复杂度上相同,但优化后的方法显著降低了
2025-05-31 01:00:00
578
原创 LeetCode第237题_删除链表中的节点
摘要:LeetCode第237题要求删除单链表中的指定节点,但无法访问头节点。解题关键在于巧妙修改当前节点:将下一个节点的值复制到当前节点,然后跳过下一个节点,实现"删除"效果。这种方法时间复杂度O(1),适用于C#、Python、C++等语言。题目保证节点非末尾且值唯一,无需额外检查。相关题目包括移除链表元素、删除重复项等。该解法突破常规思维,通过值复制和指针操作高效解决问题。(150字)
2025-05-30 02:00:00
1617
原创 LeetCode第236题_二叉树的最近公共祖先
本文介绍了LeetCode第236题"二叉树的最近公共祖先"的解题方法。题目要求在一棵普通二叉树中找到两个指定节点的最近公共祖先。文章提供了两种解决方案:递归法和迭代法。递归法通过深度优先搜索,根据左右子树搜索结果判断公共祖先;迭代法使用哈希表存储父节点信息,通过回溯比较寻找公共祖先。两种方法的时间复杂度均为O(n),空间复杂度为O(h)或O(n)。代码实现提供了C#、Python和C++三种语言的版本,适用于不同技术背景的开发者。
2025-05-30 01:00:00
1016
原创 LeetCode第235题_二叉搜索树的最近公共祖先
摘要:LeetCode第235题要求找出二叉搜索树中两个节点的最近公共祖先。利用二叉搜索树的特性(左子树值小于根,右子树值大于根),可通过迭代或递归方法高效解决。迭代法从根节点出发,根据节点值比较决定向左或向右移动,时间复杂度O(h);递归法同理,但空间复杂度O(h)。本文提供了C#、Python和C++的迭代与递归实现代码,适用于平衡树时性能更优。
2025-05-29 02:00:00
618
原创 LeetCode第234题_回文链表
本文介绍了判断链表是否为回文链表的三种方法。第一种使用栈存储节点值后比较,时间复杂度O(n),空间复杂度O(n)。第二种采用快慢指针找中点并反转后半链表比较,时间复杂度O(n),空间复杂度O(1)。第三种通过递归实现,时间复杂度O(n),但空间复杂度仍为O(n)。文章提供了C#、Python和C++的代码实现,其中快慢指针法是空间最优解,适合解决进阶要求。判断回文链表的核心在于对称性比较,不同方法在时间/空间复杂度上各有取舍。
2025-05-29 01:00:00
817
原创 LeetCode第233题_数字1的个数
本文探讨了LeetCode第233题"数字1的个数"的解法。该题要求统计所有小于等于n的非负整数中数字1出现的总次数。文章分析了暴力解法的时间复杂度问题,提出使用数学方法进行优化的思路。通过数位统计法,将问题分解为计算数字1在每个位(个位、十位等)上出现的次数,并给出了统一的计算公式。提供了C#、Python和C++的多种实现代码,比较了不同语言的性能表现。时间复杂度优化至O(log n),空间复杂度为O(1)。文章还讨论了代码优化方向、常见错误和相关题目,为解决类似数字统计问题提供了系统性的思路。
2025-05-28 02:00:00
1475
原创 LeetCode第232题_用栈实现队列
本文介绍了如何使用两个栈实现队列功能,支持push、pop、peek和empty操作。核心思路是利用输入栈(inStack)处理入队,输出栈(outStack)处理出队,当outStack为空时将inStack元素全部转入outStack以实现队列的先进先出特性。提供了C#、Python和C++三种实现代码,并分析了其时间复杂度(均摊O(1))和空间复杂度(O(n))。文章还比较了不同语言的性能差异,指出C++最快,Python最慢但更简洁,同时给出了优化建议和常见错误提醒。这种双栈方法简单直观地模拟了队列
2025-05-28 01:00:00
911
原创 LeetCode第231题_2的幂
LeetCode第231题要求判断一个整数是否是2的幂。2的幂在二进制表示中只有一个1,其余位为0。常见的解题方法包括循环迭代和位运算。循环迭代通过不断将n除以2,检查是否能整除,直到n变为1。位运算则利用n & (n-1) == 0或n & (-n) == n的特性,直接判断n是否只有一个1。代码实现中,需注意处理n为负数或零的情况。位运算方法的时间复杂度为O(1),是最优解。相关题目包括判断3的幂、4的幂等。
2025-05-27 02:00:00
568
原创 LeetCode第230题_二叉搜索树中第K小的元素
LeetCode第230题要求在一个二叉搜索树(BST)中找到第k小的元素。BST的性质使得中序遍历(左-根-右)能够得到一个升序序列,因此可以通过中序遍历来找到第k小的元素。题目提供了三种解法:递归中序遍历、迭代中序遍历和分治法。递归和迭代方法的时间复杂度为O(n),空间复杂度为O(h),其中n是节点数,h是树的高度。分治法的时间复杂度为O(h),空间复杂度为O(h)。代码实现包括C#和Python版本,分别展示了这三种方法的实现细节。
2025-05-27 01:00:00
599
原创 LeetCode第229题_求众数II
LeetCode 第229题要求找出数组中所有出现次数超过 ⌊ n/3 ⌋ 的元素。常规解法是使用哈希表计数,但题目进阶要求时间复杂度为 O(n)、空间复杂度为 O(1)。为此,可以采用摩尔投票法的扩展版本。该算法的核心思想是:数组中最多只有两个元素可能满足条件。通过维护两个候选值及其计数器,遍历数组进行投票,最终确认候选值的实际出现次数是否超过阈值。代码实现包括 C#、Python 和 C++,均通过两次遍历完成,时间复杂度为 O(n),空间复杂度为 O(1)。
2025-05-26 02:00:00
888
原创 LeetCode第228题_汇总区间
LeetCode 第228题要求将无重复元素的有序整数数组划分为连续的区间,并返回这些区间的最小有序列表。每个区间按特定格式输出,如 "a->b" 或 "a"。解题思路是通过一次遍历数组,使用两个指针记录每个区间的起点和终点,当遇到不连续的元素时,将当前区间添加到结果列表中,并开始新的区间。代码实现包括C#、Python和C++版本,时间复杂度为O(n),空间复杂度为O(1)。该题的关键在于正确处理区间的边界情况,确保每个数字都被恰好覆盖。
2025-05-26 01:00:00
681
虚函数c++语言
2018-05-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人