- 博客(5)
- 收藏
- 关注
原创 从全排列出发初步理解回溯+去重算法
本文探讨了使用回溯算法解决带有去重要求的全排列问题。针对包含重复数字的序列,提出了两种去重方法:一是通过排序预处理,在枚举时跳过重复数字;二是利用哈希表统计元素频次,直接枚举不重复键值。文章详细分析了回溯算法的递归实现过程,包括状态标记与恢复机制,并提供了两种方法的C++代码实现。第一种方法使用排序和标记数组,第二种则通过哈希表简化了去重逻辑。最后给出了力扣47题"全排列II"的链接,为读者提供了实践验证的平台。
2026-05-20 22:40:06
355
原创 Leetcode542 之 01矩阵,多源BFS题解
本文探讨了如何计算01矩阵中每个元素到最近0的距离问题。首先分析了DFS方法的不适用性,指出其会陷入死循环或漏解。然后提出采用多源BFS解法:将所有0元素作为源点入队,通过队列依次处理每个节点的相邻节点,首次访问时即确定最优距离。文章给出了C++实现代码,使用队列进行广度优先搜索,同时利用-1标记未访问节点。最后强调理解BFS和DFS的宏观计算过程对解题的重要性,指出BFS像水波扩散能保证首次访问即为最优解的特点。
2026-04-11 18:42:02
348
原创 Leetcode 2958.最多k个重复元素的最长子数组,滑动窗口题解和总结
本文探讨了如何求解整数数组中最长"好数组"子数组的长度问题。首先明确了子数组的连续特性,指出滑动窗口法是解决此类问题的有效方法。通过维护左右指针和哈希表来统计窗口内元素出现次数,当某元素出现超过k次时收缩左边界,同时记录最大合法窗口长度。文章提供了C++实现代码,强调了边界检查和操作顺序等细节问题,并给出了力扣题目链接供参考。该解法时间复杂度为O(n),空间复杂度为O(n),能高效解决问题。
2026-04-10 20:07:25
190
原创 Leetcode329.矩阵中的最长递增路径,记忆化DFS题解
本文探讨了在m×n矩阵中寻找最长递增路径的问题。解题采用深度优先搜索(DFS)结合记忆化技术,通过递归计算从每个点出发的最长路径长度,并存储中间结果避免重复计算。算法核心是:对于每个网格点,检查四个方向的相邻点,若值更大则递归求解其最长路径,最终取最大值加1作为当前点的结果。通过遍历所有起点并取全局最大值得到最终解。该方法相比广度优先搜索(BFS)更高效,体现了记忆化搜索在解决动态规划问题中的优势,但需注意递归可能带来的栈溢出风险。题目来自LeetCode 329题。
2026-04-09 14:35:20
240
原创 Leetcode题解,找到二叉树中两节点的最近公共祖先(C++实现)
接下来找p,p的位置有两种可能,其一是为q的后代,这时我们需要判断一下,如果p真是q的后代,则两者最近的祖先就是q自己,直接返回q即可;另一种情况,p的祖先另有其人,则不断地将栈中的祖先出栈,判断p是否是其后代,如果是,则该祖先就是最近公共祖先。(在解题的过程中,我也发现,可以用后序遍历来替代中序遍历,这样做的好处是可以指定先找哪个节点,再在此节点的基础上去判断另一节点的位置。如果是中序遍历,而且你又指定了先找某一个节点,就可能会出现该节点是遍历的最后一个节点,栈中空空,无祖先可访问的情况……
2024-11-05 18:24:34
428
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅