- 博客(29)
- 收藏
- 关注
原创 day22 回溯算法part01
本文介绍了回溯算法的理论基础和实际应用。回溯本质上是一种暴力求解方法,适用于需要动态处理循环层数的问题。文章给出了回溯算法的通用模板,并展示了三个典型案例:组合问题(LeetCode 77题)、组合总和III(LeetCode 216题)和电话号码字母组合(LeetCode 17题)。每个案例都包含详细的问题描述、解题思路和C++代码实现,其中组合问题还特别说明了剪枝优化技巧。这些示例展示了回溯算法在处理不同场景下的应用方式,特别是当问题需要遍历不定数量的选择时,回溯算法能有效解决暴力解法难以处理的情况。
2025-08-27 18:23:25
337
原创 day20 二叉树part7
本文介绍了二叉树和二叉搜索树的几种基础操作算法。对于二叉树的最近公共祖先问题,采用后序遍历回溯法,自底向上查找;二叉搜索树的公共祖先则利用其有序性进行快速定位。二叉搜索树的插入操作通过递归找到合适位置创建新节点。删除操作较为复杂,需处理四种情况:叶子节点、单子树节点、双子树节点(将右子树接至左子树最右节点)。这些算法均采用递归实现,时间复杂度为O(h),h为树的高度,体现了树结构处理的基本思路和方法。
2025-08-25 23:09:21
327
原创 day18 二叉树part6
本文介绍了二叉搜索树的两个常见问题解法。第一个问题是求树中任意两节点差的最小绝对值(530题),通过中序遍历利用前驱指针比较相邻节点差值,降低时间复杂度至O(n)。第二个问题是寻找二叉搜索树中的众数(501题),同样利用中序遍历的有序性统计频率,避免使用哈希表。对于一般二叉树,则需借助哈希表统计频率后再排序处理。两题均采用递归遍历,关键点在于利用二叉搜索树的中序遍历特性优化算法效率。
2025-08-24 21:49:25
171
原创 Day17 二叉树part5
本文介绍了二叉树相关的四个算法题解:1)最大二叉树通过递归构造,每次选取当前区间的最大值作为根节点;2)合并二叉树采用前序遍历,重叠节点值相加;3)二叉搜索树的查找利用BST特性递归搜索;4)验证BST通过中序遍历检查是否严格递增。所有解法均采用递归实现,时间复杂度为O(n)。其中验证BST需注意处理边界值,使用指针记录前驱节点。这些题目展示了二叉树的基本操作和BST特性的应用。
2025-08-22 15:11:45
666
原创 Day16 二叉树part4
本文介绍了二叉树相关的三个算法题解:1)使用递归前序遍历找树左下角的值;2)判断是否存在路径总和等于目标值的路径(112题);3)查找所有路径总和等于目标值的路径(113题)。对于找左下角值,通过维护最大深度变量实现;对于路径总和问题,112题采用递归及时返回,113题则遍历整棵树记录所有路径。关键点在于区分递归是否需要返回值:112题需要及时返回结果,113题需要遍历全部路径。
2025-08-22 12:31:37
316
原创 day15 二叉树part3
本文摘要了三道二叉树相关算法题: 平衡二叉树判断(110题):通过后序遍历递归计算子树高度差,若绝对值超过1则返回-1标记不平衡。关键点在于先处理子树再判断当前节点。 二叉树所有路径(257题):使用前序遍历和回溯法记录根到叶子的路径。典型回溯体现在递归返回时的path.pop_back()操作,简化版通过字符串拼接隐式回溯。 左叶子节点求和(404题):采用后序遍历,重点在于识别左叶子节点的条件(左孩子且无左右子树)。递归累加符合条件的左叶子值。 三道题目分别展示了二叉树遍历(前序、后序)与回溯法的应用场
2025-08-20 21:57:23
382
原创 day14 二叉树part2
本文总结了二叉树相关的四个经典算法问题及其递归解法。1) 反转二叉树:通过递归交换左右子树实现;2) 判断对称二叉树:递归比较左右子树是否镜像对称;3) 二叉树最大深度:递归计算左右子树深度取最大值;4) 二叉树最小深度:递归计算时需处理单子树情况。此外还给出了N叉树最大深度的解法。这些算法都采用递归思想,关键在于确定递归终止条件、递归逻辑和返回值。对于最小深度问题需特别注意单子树情况的处理。
2025-08-20 06:46:23
215
原创 哇哇哇·typora中的外链图片导入优快云
本文分享了在Typora与优快云间迁移笔记的实用技巧:1)外链图片需在Typora编辑模式下复制内容到优快云,系统会自动下载图片;2)本地图片建议直接截图替换,既能复查内容又避免维护本地文件夹。作者指出该方法适合图片较少的情况,若图片量大或对精度要求高,仍需建立云端图库。全文提供了高效迁移的折中方案,兼顾便利性与内容完整性。
2025-08-19 16:27:40
163
原创 day13 二叉树part1
本文介绍了二叉树的基础知识,重点讲解了递归遍历和层序遍历的实现方法。递归遍历部分提出了方法论三要素:确定参数和返回值、终止条件、单层递归逻辑,并展示了前序、中序、后序遍历的统一封装实现。层序遍历部分比较了队列和栈的应用场景,给出了递归和迭代两种实现方式的分层结果模板。文章还推荐了可视化学习网站Hello算法,帮助理解二叉树遍历过程。通过代码示例和原理说明,为读者提供了清晰的二叉树遍历思路和实践方法。
2025-08-19 16:14:51
537
原创 Day11 栈与队列part2
本文介绍了两个算法问题的解决方案:逆波兰表达式求值和滑动窗口最大值。 逆波兰表达式求值(150题): 使用栈结构处理后缀表达式 遇到数字入栈,遇到运算符则弹出栈顶两个元素进行运算 注意整数除法的处理(保留整数部分) 提供了C++和Python两种实现方式 滑动窗口最大值(239题): 使用单调队列维护窗口内元素的递减顺序 队列头部始终是当前窗口最大值 窗口移动时移除过期元素并保持队列单调性 解释了为什么不能使用大顶堆的原因 提供了C++和Python实现,并对比了不同语言中队列操作的差异 两种解法都利用了特
2025-08-16 21:07:23
694
原创 Day10 栈与队列part1
本文介绍了栈和队列的基本操作及相互实现的方法。首先列出了队列和栈的常用方法,包括队列的front()、back()、push()、pop()等操作,以及栈的push()、pop()、top()等操作。然后详细讲解了两个经典问题:用栈实现队列(232题)和用队列实现栈(225题)。对于栈实现队列,使用两个栈来反转顺序;对于队列实现栈,通过循环移动队列元素来模拟栈操作。每个问题都提供了完整的C++代码实现,展示了如何通过这些数据结构相互转换来满足不同需求。
2025-08-16 01:12:54
282
原创 day9 字符串part2
本文介绍了两种字符串操作算法:1.翻转字符串中的单词顺序(如"the sky is blue"变为"blue is sky the"),通过先整体翻转再逐个单词翻转实现;2.字符串右旋转(如"abcdefg"右旋2位得"fgabcde"),采用三次局部翻转完成。两种方法都利用了双指针和翻转操作,时间复杂度为O(n),空间复杂度O(1)。代码实现中需要注意边界条件处理,如空格去除和指针越界问题。
2025-08-14 23:19:35
261
原创 day8 字符串part01
本文总结了字符串处理的三道典型题目:反转字符串、间隔反转字符串和替换数字。对于简单反转,使用双指针原地交换即可;间隔反转则通过循环步长2k处理前k个字符;替换数字时先计算扩容空间,再从后往前填充"number"。这些解法都遵循O(1)空间复杂度原则,展示了字符串处理中指针操作和空间优化的核心技巧。Python和C++实现体现了不同语言的切片特性与手动扩容差异。
2025-08-13 22:15:34
424
原创 day7 哈希表part2
本文介绍了四个数组相关的算法题目及其解法: 四数相加II:计算四个数组中元素和为0的元组个数。使用哈希表存储前两数组的和及其出现次数,再在后两数组中查找互补值。 赎金信:判断杂志字符串能否构成赎金信。通过字符频率统计比较实现,时间复杂度O(n)。 三数之和:找出数组中所有不重复的三元组使其和为0。采用排序+双指针法,注意去重处理。 四数之和:扩展三数之和的思路,在双循环基础上使用双指针,注意剪枝和去重。 各解法均包含C++和Python实现,核心思想包括哈希优化、双指针技巧及去重处理。
2025-08-12 17:49:05
573
原创 day6 哈希表part1
哈希表是一种通过关键码直接访问的数据结构,常用于快速判断元素是否存在。它以空间换时间,通过哈希函数将键映射到索引,可能产生碰撞,常用拉链法和线性探测法解决。常见的哈希结构包括数组、集合(set)和映射(map),各有特点和应用场景。例如,在解决"有效的字母异位词"问题时,使用数组统计字符频率;在"两个数组的交集"中,使用集合存储元素;而"快乐数"问题则利用集合检测循环。这些方法展示了哈希表在高效查找和存储方面的优势。
2025-08-11 13:12:55
643
原创 day4 链表part2
本文介绍了链表相关的四个经典算法题解:1. 两两交换链表节点:使用虚拟头节点和临时指针进行相邻节点交换;2. 删除链表倒数第N个节点:通过快慢指针,先让快指针前移n+1步再同步移动;3. 链表相交问题:先计算两链表长度差,对齐后同步遍历找交点;4. 环形链表检测:快慢指针相遇后,从头节点和相遇点同步移动找到环入口。这些解法均采用指针操作,时间复杂度为O(n),空间复杂度为O(1)。
2025-08-09 18:12:58
345
原创 day3 链表part1
本文介绍了链表操作中的虚拟头节点应用场景及三种删除链表元素的方法。虚拟头节点适用于需要修改头节点的场景,如删除/添加节点、合并/反转链表等。文章以力扣203题为例,展示了三种解法:1)直接操作原链表,需单独处理头节点;2)使用虚拟头节点统一处理所有节点;3)递归法通过递归调用删除指定值节点。最后简要提及了707题设计链表的要求,包括获取节点、头尾插入、按索引操作等功能。核心代码展示了如何通过虚拟头节点简化链表操作,避免特殊处理头节点的情况。
2025-08-09 03:00:27
331
原创 Day2 数组part2
摘要 本文包含四个算法问题的解析与实现: 长度最小的子数组:使用滑动窗口技术在O(n)时间内找到和≥target的最短连续子数组。关键点在于动态调整窗口左右边界并更新最小长度。 螺旋矩阵II:通过分层填充的方法生成顺时针螺旋矩阵。维持四个边界(top,bottom,left,right)逐步向内收缩填充数字。 区间和查询:利用前缀和数组预处理数据,实现O(1)时间复杂度的区间和查询。注意处理边界条件(a=0时)。 开发商土地分割:通过预先计算行列和,寻找使两部分土地价值差最小的切割方案。分别考虑横向和纵向切
2025-08-07 18:56:29
531
原创 Day1 数组part1
本文总结了三个常见数组操作问题的解法。1) 二分查找:通过维护左右指针逐步缩小范围,时间复杂度O(logn);2) 移除元素:使用双指针法,快指针遍历数组,慢指针记录非目标值位置,实现原地修改;3) 有序数组平方:利用双指针从两端向中间遍历比较,将较大平方值逆序填入结果数组。所有解法都遵循了避免重复遍历和原地操作的原则,提供了C++和Python两种实现。
2025-08-06 21:10:13
427
原创 [alphafold003]Feature embed
本文介绍了AlphaFold中的特征嵌入模块,主要包括输入嵌入器(Input Embedder)、循环嵌入器(Recycling Embedder)和额外MSA堆栈三部分。
2025-07-17 15:40:12
301
原创 [alphafold001]提取特征:让输入结构化
本文介绍了AlphaFold2中特征提取的关键步骤,重点解析了特征提取pipeline的完整流程,包括随机选择聚类中心、掩码处理、基于Hamming距离的聚类分配等步骤。这些结构化特征为后续的evoformer模块提供了标准化的输入。
2025-07-11 06:59:43
493
原创 [alphafold000] 学习alphafold的motivation
感谢优快云是瑶瑶子啦的博客,学习资料主要参考她的博客内容,写得非常详细。
2025-07-07 12:23:34
556
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅