自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(598)
  • 问答 (1)
  • 收藏
  • 关注

原创 Leetcode 994. 腐烂的橘子 多源 BFS

本文介绍LeetCode 994题"腐烂的橘子"的BFS解法。题目要求在m×n网格中,新鲜橘子(1)被腐烂橘子(2)感染,每分钟向四周扩散,求所有橘子腐烂所需时间或返回-1(若有橘子无法腐烂)。 算法采用多源BFS:1)统计初始腐烂橘子和新鲜橘子数量;2)使用队列进行层级遍历,每轮处理当前所有腐烂橘子,并向四周扩散;3)每扩散一轮时间加1,直到无法继续扩散。最后检查剩余新鲜橘子数量,若为0则返回总时间-1(最后一轮不需额外时间),否则返回-1。时间复杂度O(mn),空间复杂度O(mn)。

2025-09-18 16:29:00 194

原创 Leetcode 763. 划分字母区间 贪心

摘要 Leetcode 763题要求将字符串划分为尽可能多的片段,使每个字符仅出现在一个片段中。两种解法思路相似:第一种解法通过双指针遍历,每次找到当前字符的最后出现位置来扩展右边界;第二种解法优化了效率,先预处理记录每个字符的最后出现位置。当遍历到当前右边界时,切分片段并更新指针。时间复杂度从O(n^2)优化到O(n),空间复杂度O(1)。

2025-09-16 22:36:11 200

原创 Leetcode 169. 多数元素 哈希计数 / 排序 / 摩尔投票

本文介绍了三种在数组中找到多数元素(出现次数超过n/2)的算法:1)哈希计数法,通过统计元素频率找出众数;2)排序法,利用众数必在中点的特性;3)摩尔投票法,通过擂台赛思想以O(1)空间复杂度高效求解。三种方法分别体现了哈希统计、排序特性和巧妙计数的不同解题思路,其中摩尔投票法最优。

2025-09-15 11:27:53 123

原创 求最小公倍数(GCD)和最大公约数(LCM)——原理和代码

本文介绍了最大公约数(GCD)和最小公倍数(LCM)的计算方法。GCD采用欧几里得算法(辗转相除法),通过递归公式gcd(a,b)=gcd(b,a%b)实现,并处理了负数和零值情况。LCM则基于公式lcm(a,b)=|a*b|/gcd(a,b)计算。文中提供了C++实现代码,并通过测试案例验证了算法的正确性,包括正数、负数和零值输入的情况。

2025-09-14 16:45:20 118

原创 【AI知识点】模型训练优化之——混合精度训练

混合精度训练结合FP16和FP32的优势,通过前向传播使用FP16加速计算,反向传播后转换为FP32更新权重,配合梯度缩放防止数值下溢。这种方法在保持模型精度的同时,显著提升训练速度并减少显存占用,已成为现代深度学习训练的标配技术。

2025-09-11 21:46:10 343

原创 算法——二分查找的详细介绍

本文介绍了二分查找算法的核心思想及其四种典型应用场景。二分查找通过不断将搜索范围减半,将时间复杂度优化至O(log n),适用于已排序数组。文章详细展示了四种常见问题的代码实现:1)无重复数组中查找目标值;2)有重复数组中查找目标值首次出现位置;3)查找第一个大于目标值的元素;4)查找最后一个小于目标值的元素。每种情况都配有示例代码和测试用例,通过具体数组演示了算法执行过程,帮助读者理解二分查找在不同场景下的应用逻辑和边界条件处理。

2025-09-11 13:37:24 162

原创 【大模型手撕】pytorch实现LayerNorm, RMSNorm

本文介绍了两种常用的归一化方法LayerNorm和RMSNorm的实现原理及代码。LayerNorm通过对输入特征进行均值和方差归一化,并引入可训练参数γ和β来调整缩放和平移;RMSNorm则简化计算,仅使用均方根进行归一化。两者的PyTorch实现都包含可训练的缩放参数γ,并支持可选偏置项。LayerNorm适用于Transformer等场景,而RMSNorm计算更高效,常用于大模型优化。两种方法都通过保持特征分布稳定来提升模型训练效果。

2025-09-09 15:18:48 224

原创 2026秋招Leetcode刷题记录

常见考点:前缀和(区间和查询)、差分数组(批量区间修改)、二分查找(变种:找插入位置、旋转数组找最小值)、指针(三数之和、移除元素)、滑动窗口(子数组最大和、最长无重复子串)、多维数组。常见考点:前 / 中 / 后序遍历(递归 + 迭代实现)、层序遍历(BFS)、从前序 + 中序、后序 + 中序还原二叉树、对称二叉树、平衡二叉树判断、二叉树直径 / 深度计算。常见考点:反转链表(全反转、部分反转)、环检测与入口查找(快慢指针)、删除倒数第 k 个节点、合并有序链表(递归 / 迭代)

2025-09-05 21:12:14 650

原创 Leetcode 234. 回文链表

本文介绍了两种判断链表是否为回文的方法。第一种是将链表值存入数组,通过双指针比较数组元素;第二种通过快慢指针找到中点,反转后半部分链表后与前半部分逐一比较。第二种方法空间复杂度更优(O(1)),但需要实现查找中点和反转链表两个辅助函数。两种方法时间复杂度均为O(n),适用于不同场景需求。

2025-09-04 20:17:41 287

原创 Leetcode 876. 链表的中间结点 快慢指针

该题要求找到链表的中间节点。采用快慢指针法:快指针每次走两步,慢指针每次走一步。当快指针到达链表末尾时,慢指针正好指向中间节点。时间复杂度O(n),空间复杂度O(1)。代码实现简洁高效,通过双指针同步遍历即可解决问题。

2025-09-04 19:26:52 165

原创 Leetcode 206. 反转链表 迭代/递归

本文介绍了反转链表的两种解法:迭代法和递归法。迭代法通过三个指针(pre、now、next)逐步反转链表节点指向;递归法则通过递归到链表末尾,然后依次反转每个节点的指向。两种方法时间复杂度均为O(n),空间复杂度迭代法为O(1),递归法为O(n)(递归栈空间)。递归解法更直观但可能栈溢出,迭代解法更高效。

2025-09-04 18:12:03 176

原创 Leetcode 160. 相交链表

本文介绍了LeetCode 160题"相交链表"的两种解法:哈希法和双指针法。哈希法通过存储一个链表的所有节点,再遍历另一个链表查找匹配节点,时间复杂度O(m+n)。双指针法通过让两个指针分别遍历两个链表后交换起点,最终会在相交点或null相遇,时间复杂度O(m+n)但空间复杂度O(1)更优。两种方法都正确处理了不相交的情况,其中双指针法通过巧妙设计遍历路径实现了高效查找。

2025-09-04 17:24:10 172

原创 Leetcode 240. 搜索二维矩阵 II 矩阵 / 二分

本文介绍了两种解决Leetcode 240题的方法:排除法和二分法。排除法通过从矩阵右上角或左下角开始搜索,利用行列递增特性逐步缩小范围,时间复杂度O(m+n)。二分法则对每行使用二分查找,时间复杂度O(mlogn)。两种方法都先检查目标值是否在矩阵数值范围内以提高效率。代码实现提供了C++版本,适用于有序二维矩阵的快速搜索。

2025-09-04 14:54:56 247

原创 Leetcode 647. 回文子串 动态规划

本文介绍了Leetcode 647题"回文子串"的动态规划解法。通过构建二维数组dp[i][j]表示子串s[i:j]是否为回文串,从字符串末尾开始倒序遍历。当首尾字符相等时,若子串长度≤1则为回文串,否则由内层子串dp[i+1][j-1]决定。该方法时间复杂度O(n²),空间复杂度O(n²),能高效统计所有回文子串数目。

2025-08-29 01:33:26 173

原创 Leetcode 494. 目标和 动态规划-01背包

本题目要求通过加减运算使数组元素之和等于目标值。解题关键在于将问题转化为背包问题:将数组分成两部分,使其差值为目标值。动态规划解法中需注意边界条件(空数组和为0的方案数为1)和状态转移方程。空间优化版本采用一维数组,内循环倒序更新以避免重复计算。时间复杂度O(n*sum),空间复杂度O(sum),其中sum为数组元素和。核心是将原问题转化为寻找和为特定值的子集个数问题。

2025-08-28 14:53:21 318

原创 Leetcode 1049. 最后一块石头的重量 II 动态规划-01背包

本文解决了LeetCode 1049题"最后一块石头的重量II"。通过将问题转化为背包问题,将石头分成两堆,使两堆重量尽可能接近总和的一半。使用动态规划求解,dp[i][j]表示前i个石头在容量j内的最大重量。最终结果为总和减去两倍的最大重量,即两堆石头的最小可能差值。该方法巧妙地将原问题转换为0-1背包问题,时间复杂度为O(n*target/2)。

2025-08-26 18:01:43 209

原创 Leetcode 1046. 最后一块石头的重量 最大堆/优先队列

本文介绍了LeetCode 1046题的解法,题目要求计算最后一块石头的重量。采用最大堆(优先队列)的数据结构,每次取出最大的两块石头进行碰撞处理:若重量不等则将差值重新放入堆中,直到剩余石头少于两块。最终堆为空则返回0,否则返回剩余石头的重量。该解法时间复杂度为O(nlogn),空间复杂度O(n),高效地模拟了石头碰撞销毁的过程。核心代码使用C++的priority_queue实现最大堆功能。

2025-08-26 16:59:27 235

原创 Leetcode 416. 分割等和子集 (动态规划-01背包问题)

该题是判断能否将数组分割成两个和相等的子集。解题思路转化为判断是否存在子集和等于数组总和的一半。采用动态规划方法:定义dp[i][j]表示前i个元素能否组成和为j的情况。状态转移方程为dp[i][j] = dp[i-1][j] || dp[i-1][j-nums[i-1]]。通过二维数组求解后,可优化为一维数组降低空间复杂度。关键步骤包括:计算总和、排除奇数情况、初始化dp数组、双层循环更新状态。最终返回dp[target]即为结果。

2025-08-26 11:49:22 270

原创 动态规划之背包问题详细介绍(0-1背包,完全背包)

摘要:本文介绍了两种经典背包问题的动态规划解法。0-1背包问题要求每件物品只能选一次,通过二维数组或空间优化的一维数组(需倒序遍历)求解。完全背包问题允许物品无限次选择,同样可优化为一维数组但需正序遍历。两种方法都建立了状态转移方程,通过比较选择/不选择物品的情况来求解最大价值。代码示例展示了具体实现,空间优化版本通过调整遍历顺序来保证正确性。

2025-08-26 01:33:48 309

原创 Leetcode 343. 整数拆分 动态规划

本文介绍了LeetCode 343题"整数拆分"的动态规划解法。题目要求将正整数n拆分成至少两个正整数的和,使这些整数的乘积最大化。解法使用动态规划数组dp[i]表示i拆分后的最大乘积,初始化dp[2]=1。对于每个i从3到n,通过枚举拆分点j(1到i/2),比较直接拆分(j*(i-j))和继续拆分(j*dp[i-j])的乘积,取最大值更新dp[i]。最终返回dp[n]作为结果。时间复杂度O(n²),空间复杂度O(n)。

2025-08-19 23:56:45 304

原创 C++ STL(标准模板库)学习

本文用于记录C++ STL中的各种用法

2025-08-19 11:09:59 1050

原创 Leetcode 128. 最长连续序列 哈希

本文比较了LeetCode 128题"最长连续序列"的两种解法。解法1使用有序map进行排序和遍历,时间复杂度为O(n log n),不符合题目要求的O(n)时间复杂度。解法2利用unordered_set的O(1)查找特性,通过检查每个可能的序列起点来计算最长序列长度,确保每个元素最多被访问两次,达到O(n)时间复杂度。解法2更优,满足题目要求,是推荐解法。两种解法都处理了空输入的特殊情况。

2025-08-19 11:07:52 310

原创 PyTorch中实现早停机制(EarlyStopping)附代码

摘要: EarlyStopping是一种防止模型过拟合、节省资源的训练策略,当验证集指标(如损失)不再改善时提前终止训练。其核心是设置耐心值(patience),若连续若干次验证损失未达到最优值(考虑最小改进量delta)则停止。

2025-07-25 10:42:24 359

原创 算法题:有n个台阶,每次只能上1,2,3层,但不能连续2次上3层,有多少解法?

有n个台阶,每次只能上1,2,3层,但不能连续2次上3层,有多少解法?

2025-04-23 01:47:59 229

原创 【AI知识】什么是梯度累加?为什么要梯度累加?

梯度累积(Gradient Accumulation)是一种在训练深度学习模型时常用的技术,旨在**解决由于显存限制导致无法使用大批量数据进行训练的问题**。​其基本思想是在**多个小批量(mini-batch)上累积梯度,模拟大批量训练的效果,同时避免一次性加载过多数据导致显存溢出**。

2025-03-27 18:11:08 440

原创 老鼠喝毒药——经典的逻辑推理和数学优化问题

老鼠喝毒药:有若干瓶外观相同的液体,其中一瓶含有毒药。​如果老鼠饮用含毒药的液体,将在特定时间内死亡。​如何在有限的时间内,利用最少数量的老鼠,找出含毒药的那瓶液体?

2025-03-26 16:29:24 465

原创 【AI知识】深度学习中模型参数初始化方法介绍

【AI知识】深度学习中模型参数初始化方法介绍: 零初始化,随机初始化, Xavier初始化,He初始化

2025-03-25 17:47:05 1159

原创 【大模型手撕】pytorch实现Self-Attention,Multi-Head-Attention,Grouped-Query-Attention

本文介绍了使用PyTorch实现Self-Attention,Multi-Head-Attention,Grouped-Query-Attention的代码

2025-03-21 16:10:46 945

原创 【大模型知识点】前置层归一化(Pre-Normalization)

现在很多大模型采用 **预归一化(Pre-Normalization)** 结构,如LLaMA、Qwen,主要是因为它能够显著提升模型的训练稳定性和收敛速度,同时缓解深层网络中的梯度消失或爆炸问题。

2025-03-21 13:04:59 346

原创 【大模型知识点】检索增强生成(Retrieval Augmented Generation,RAG)简要介绍

【大模型知识点】检索增强生成(Retrieval Augmented Generation,RAG),检索召回和重排序

2025-03-21 02:34:29 728

原创 【AI知识】倒数排名融合 (RRF) ——用于融合多个排序列表的结果

在RAG混合检索中,经常需要将多个检索结果汇总。**Reciprocal Rank Fusion (RRF,倒数排名融合)** 是一种用于融合多个检索结果列表的算法。它的核心思想是将不同检索方法(如 BM25 和向量检索)的排名结果结合起来,生成一个更全面、更准确的最终排名。

2025-03-20 19:56:19 968

原创 Leetcode 378. 有序矩阵中第 K 小的元素 二分查找

原题链接:Leetcode 378. 有序矩阵中第 K 小的元素

2025-03-20 17:35:42 492

原创 【AI知识】在 PyTorch 中设计和实现一个完整的模型训练和优化流程

【AI知识】在 PyTorch 中设计和实现一个完整的模型训练和优化流程

2025-03-20 11:29:18 953

原创 【AI知识】常见的优化器及其原理:梯度下降、动量梯度下降、AdaGrad、RMSProp、Adam、AdamW

【AI知识】常见的优化器及其原理:梯度下降、动量梯度下降、AdaGrad、RMSProp、Adam、AdamW

2025-03-19 21:36:48 1225

原创 【AI知识】导数,偏导,梯度的解释

导数,偏导,梯度的解释

2025-03-19 15:55:19 1000

原创 Leetcode 1277. 统计全为 1 的正方形子矩阵 动态规划

【代码】Leetcode 1277. 统计全为 1 的正方形子矩阵 动态规划。

2025-03-19 11:28:11 276

原创 【算法】算法简要介绍

算法是解决特定问题的方法和步骤,它可以根据问题的不同性质和解决思路进行分类。1. 排序算法 (Sorting Algorithms)2. 查找算法 (Search Algorithms)3. 图算法 (Graph Algorithms)4. 动态规划 (Dynamic Programming)5. 贪心算法 (Greedy Algorithms)6. 分治算法 (Divide and Conquer)7. 回溯算法 (Backtracking)8. 字符串匹配算法 (String Matchi

2025-03-14 02:30:45 1489

原创 【算法】经典图最小生成树算法介绍+代码示例(Prim+Kruskal)

【算法】经典图最小生成树算法介绍+代码示例(Prim+Kruskal)

2025-03-14 02:28:21 443

原创 【算法】并查集算法介绍+路径压缩+代码示例

并查集是一种用于管理一组不相交集合的数据结构。它主要支持以下两种操作:> - 查找(Find)​:确定某个元素属于哪个集合,通常返回该集合的代表元素,如根元素。 ​> - 合并(Union)​:将两个集合合并为一个集合。

2025-03-14 01:59:24 335

原创 【算法】经典图最短路径算法介绍+代码示例(Dijkstra+Bellman-Ford+Floyd-Warshall)

【算法】经典图最短路径算法介绍+代码示例(Dijkstra+Bellman-Ford+Floyd-Warshall)

2025-03-13 17:39:30 674

空空如也

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

TA关注的人

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