
我的算法记录
文章平均质量分 91
WenJGo
座右铭:無限進步
改变人生的事情,你必须冒险。
意义非凡的事情,大多碰巧发生。
不重要的事,才有周全的计划。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
数据结构——字符串匹配算法:朴素的匹配算法和KMP算法(超详细解释 新手也能会学!!!)
彻底掌握LPS表,KMP算法就再无难点!超详细解释,新手也能学会!!!原创 2025-06-24 08:00:00 · 1042 阅读 · 3 评论 -
栈的两个应用:括号匹配和表达式的计算(新手也能学会)
本文系统介绍了栈在括号匹配和表达式计算中的应用原理。括号匹配通过栈的LIFO特性验证嵌套结构,重点处理三种失败场景。表达式计算分为两种方法:双栈法直接处理中缀表达式,需考虑优先级和括号;后缀表达式法先转换再计算,逻辑更清晰。中缀转后缀的核心是优先级规则和栈操作,需特别注意括号处理和操作数顺序。通过多案例逐步分析栈状态变化,帮助读者掌握这两种经典算法问题。理解栈在处理嵌套结构时的延迟执行特性是关键,建议通过实际案例加深理解。原创 2025-06-23 08:00:00 · 686 阅读 · 0 评论 -
Colab零基础实战:1小时训练高精度猫狗分类模型!—— 模型训练、手把手教学、附全部源码
🐱🐶 「Colab零基础实战:1小时训练高精度猫狗分类模型!」无需高端显卡!白嫖谷歌GPU+完整代码,从数据下载→模型训练→预测部署一条龙搞定:✅ Kaggle数据集自动下载:告别手动上传,1行代码拉取25,000张图片!✅ 工业级训练技巧:早停机制防过拟合,验证准确率>85%!✅ 模型秒下载:挂载Google Drive网页端下载,64MB文件1分钟搞定(亲测碾压files.download())!✅ 预测可视化:一键运行展示分类结果+置信原创 2025-06-05 08:00:00 · 1093 阅读 · 0 评论 -
力扣每日一题——分发糖果
本文介绍了LeetCode题目"分发糖果"的贪心解法。题目要求给一排孩子分糖果,满足每个孩子至少1颗且相邻孩子中评分高的糖果更多。解法采用两次遍历:第一次从左到右确保右高分孩子糖果更多,第二次从右到左处理左高分情况并用max函数维持条件。Java和C++实现均使用O(n)时间和空间复杂度,其中空间开销用于存储糖果分配数组。该方法高效协调了相邻关系,确保最少糖果数的同时满足题目所有条件。原创 2025-06-03 14:00:00 · 687 阅读 · 0 评论 -
力扣每日一题——给小朋友们分糖果||
本文解析了力扣2929题"给小朋友们分糖果II"的数学解法。题目要求将n颗糖分给3个小朋友,每人不超过limit颗,求分配方案数。解法采用容斥原理:1) 计算无约束的总方案数C(n+2,2);2) 使用"强制先发糖"技巧计算违反约束的情况;3) 通过公式"总方案-3单超限+3双超限-三超限"得到结果。提供了Java/C++/Python实现代码,时间复杂度O(1),适用于大数情况。该方法巧妙运用组合数学和容斥原理解决约束分配问题。原创 2025-06-02 14:00:00 · 956 阅读 · 0 评论 -
力扣每日一题——蛇梯棋
即刻点击探索 → 从骰子到代码,在蛇梯之间跃迁最短路径!“童趣棋盘暗藏层序遍历精髓——BFS最优雅的应用场景之一。”📚 博客硬核内容:双语言代码+动态推演+易错案例解析,点击探索坐标转换的数学魔术!原创 2025-06-01 09:00:00 · 1664 阅读 · 0 评论 -
力扣每日一题——找到离给定两个节点最近的节点
博客摘要:双指针路径交汇法求解有向图最近公共可达节点问题核心:给定一个有向图(节点最多一条出边,可能存在环),需找到节点 node1 和 node2 均可达的节点,使两者到该节点距离的较大值最小化。若有多个解,返回最小节点编号;无解则返回 -1。解法精髓:采用 双指针路径交汇法(Dual-Pointer Path Convergence)原创 2025-05-30 16:03:35 · 804 阅读 · 0 评论 -
力扣每日一题——连接两棵树后最大目标节点数目 ||
本文介绍了LeetCode 3373题的解法——双树贡献分离法。该算法通过将问题分解为两个独立子问题:计算每棵树内部的节点贡献,再通过简单相加得到最终结果。Java和C++实现都采用BFS遍历树结构,记录节点层级奇偶分布,最后将第一棵树的节点贡献与第二棵树的最大贡献相加。时间复杂度为O(n²+m²)(BFS实现),空间复杂度为O(n+m+k)。这种分治思路避免了暴力枚举,有效优化了算法效率。原创 2025-05-29 15:45:00 · 762 阅读 · 0 评论 -
力扣每日一题2025.5.28——题号:3372.连接两棵树后最大目标节点数目 |
该题要求连接两棵无向树后计算每个节点的最大目标节点数。核心思路是:1) 预处理第二棵树,找出在k-1步内能覆盖最多节点的连接点;2) 对第一棵树每个节点计算k步内可达节点数。通过分层BFS遍历树结构,时间复杂度为O(k(n+m)),空间复杂度O(n+m)。Java和C++实现均采用邻接表存储树结构,并通过广度优先搜索分层统计可达节点数。最终结果为两棵树的覆盖数之和,在合理时间复杂度内解决了问题。原创 2025-05-28 15:00:00 · 876 阅读 · 0 评论 -
力扣热题——分类求和并作差
本文介绍了两种计算区间[1,n]内整数基于能否被m整除的分类差值方法。常规遍历法通过循环判断累加,时间复杂度O(n),易于实现但效率较低。数学优化法则利用等差数列求和公式直接计算结果,时间复杂度降至O(1),特别适合大规模数据处理。两种方法分别适用于不同场景:遍历法适合小规模数据调试,数学方法更适合高效计算需求。两种解法均提供了Java和C++的实现代码示例。原创 2025-05-27 15:00:00 · 1679 阅读 · 0 评论 -
力扣热题-有向图中最大颜色值
本文介绍了力扣1857题"有向图中最大颜色值"的解法。题目要求在给定有向图中找出路径中出现次数最多的颜色值,若图中存在环则返回-1。主要解法采用拓扑排序检测环,并结合动态规划维护各节点26种颜色的最大出现次数。时间复杂度为O(n+m26),空间复杂度为O(n26+m)。Java和C++实现均通过拓扑排序处理节点,动态规划更新颜色状态,最终返回最大颜色值或检测到环时返回-1。该解法有效结合了图论算法和动态规划技巧来解决问题。原创 2025-05-26 15:32:24 · 1078 阅读 · 0 评论 -
力扣热题——连接两字母单词得到的最长回文串
该题目要求从给定双字母单词数组中构造最长回文串。该题目要求从给定双字母单词数组中构造最长回文串。解题思路包括:1)用哈希表统计单词频率;2)处理互为反转的非回文单词对,每对贡献4字符长度;3)处理自身回文单词,偶数次每对贡献4字符,奇数次可单独作为中心贡献2字符。算法时间复杂度O(n),空间复杂度O(n),其中n为单词数量。最终结果为所有配对贡献和加上可能的中心贡献。示例解法提供了Java和C++实现,通过合理配对和中心处理最大化回文串长度。原创 2025-05-25 13:16:51 · 888 阅读 · 0 评论 -
力扣热题——查找包含给定字符的单词
该题目要求找出字符串数组中包含指定字符x的所有单词下标。解题思路是遍历数组,逐个检查单词是否包含x。算法时间复杂度为O(n*m)(n为数组长度,m为单词平均长度),空间复杂度为O(n)。提供了Java、C++、C和Python四种实现方案,均采用线性扫描和字符串查找方法。题目数据规模较小(n≤50),暴力解法完全适用且高效。原创 2025-05-24 13:30:09 · 1021 阅读 · 0 评论 -
力扣热题——罗马数字转整数
如何将罗马数字转换为整数的算法,主要使用哈希表来映射罗马字符到对应的整数值。算法通过遍历字符串,根据字符的大小关系决定是相加还是相减,从而得到最终的整数结果。文章提供了Java、C++和C三种编程语言的实现代码,并分析了算法的时间复杂度和空间复杂度,分别为O(n)和O(1)。该算法适用于处理有效的罗马数字字符串,且能够正确处理特殊情况如IV、IX等。原创 2025-05-22 17:00:00 · 966 阅读 · 0 评论 -
力扣热题——零数组变换 ||
通过处理查询操作,将整数数组 nums 变为零数组,并找到最小的查询次数 k。每个查询操作允许在指定范围内减少数组元素的值,且每个元素的减少量可以独立选择。通过二分查找和差分数组技术,可以高效地解决该问题。具体步骤包括:1) 使用二分查找确定最小的 k;2) 通过差分数组记录查询操作对数组的影响;3) 计算前缀和,验证是否可以将数组变为零数组。该解法的时间复杂度为 O(nlogq),空间复杂度为 O(n),适用于大规模数据。原创 2025-05-21 14:15:00 · 1723 阅读 · 0 评论 -
力扣热题——零数组变换 |
本文介绍了力扣题目“零数组变换I”的解法,核心在于判断数组能否通过一系列查询操作归零。解法一采用前缀和与差分数组技术,高效统计每个元素被查询区间覆盖的次数,并验证是否足够使其归零。文章提供了Java和C++的实现代码,并分析了时间复杂度和空间复杂度。时间复杂度为O(n+q),空间复杂度为O(n),适用于大规模数据处理。通过这种方法,能够快速判断数组是否可以通过给定查询操作转换为零数组。原创 2025-05-20 17:00:00 · 1044 阅读 · 0 评论 -
力扣热题——三角形类型(不会的话你似人啊)
这道题目要求判断由三个整数构成的三角形类型。解决思路分为两步:首先,根据三角形不等式定理判断是否能构成三角形,即检查最小两个数之和是否大于最大数;其次,若满足三角形条件,进一步判断边的相等情况,确定是等边三角形、等腰三角形还是普通三角形。文章提供了Java、C++、C和Python四种语言的实现代码,并分析了算法的时间复杂度和空间复杂度,均为O(1),因为输入规模固定为3,排序和条件判断的操作次数恒定。原创 2025-05-19 14:00:00 · 945 阅读 · 0 评论 -
力扣热题——数组的最小相等和
题目要求将两个数组中的所有0替换为严格正整数,并使两个数组的元素和相等,返回最小相等和,若无法实现则返回-1。解法思路如下:首先计算两个数组中非零元素的总和(sum1和sum2)以及零的数量(zero1和zero2)。然后根据零的数量分情况处理:若两个数组都没有零,直接比较sum1和sum2;若其中一个数组没有零,则另一个数组的总和必须调整到与无零数组的总和相等;若两个数组都有零,则取两个数组的最小可能总和的较大者。Java和C++的实现代码均通过遍历数组统计非零和零的数量,并根据不同情况进行判断。时间复杂原创 2025-05-18 11:50:06 · 887 阅读 · 0 评论 -
力扣热题——最长相邻不相等子序列 ||
题目要求从给定的字符串数组 words 和对应的 groups 数组中,找到一个最长的子序列,满足以下条件:1) 相邻下标的 groups 值不同;2) 相邻字符串长度相等且汉明距离为1。通过动态规划的方法,可以解决该问题。具体步骤包括:初始化 dp 数组记录子序列长度,prev 数组记录前驱节点,遍历所有可能的子序列组合,更新 dp 和 prev 数组,最后根据 prev 数组回溯得到最长子序列。时间复杂度为 O(n² * L),空间复杂度为 O(n + nL),其中 n 是数组长度,L 是字符串的平均长原创 2025-05-17 07:15:00 · 1970 阅读 · 0 评论 -
力扣热题——最长相邻不相等子序列 |
题目要求从字符串数组 words 中选出一个最长的子序列,使得该子序列中相邻字符串对应的 groups 数组中的值不同。通过贪心算法,可以高效地解决该问题。具体步骤为:初始化一个结果列表,遍历 words 数组,检查当前字符串的 groups 值是否与结果列表中最后一个字符串的 groups 值不同,若不同则将其加入结果列表。该算法的时间复杂度和空间复杂度均为 O(n),其中 n 为 words 数组的长度。通过一次遍历即可得到满足条件的最长子序列。原创 2025-05-16 13:30:00 · 908 阅读 · 0 评论 -
力扣热题——字符串转换后的长度 |
题目要求对字符串进行多次转换,每次转换根据特定规则替换字符,最终返回转换后字符串的长度。解法一通过统计字符数量并动态更新,避免了直接构造字符串的开销。具体步骤包括:初始化字符计数数组,模拟每轮转换,更新字符数量,最终计算总长度。该方法的时间复杂度为O(t),空间复杂度为O(1)。另一种解法使用矩阵快速幂,虽然性能相似,但实现更复杂。整体思路是通过数学建模和动态规划高效解决问题。原创 2025-05-15 14:00:00 · 691 阅读 · 0 评论 -
力扣热题——找出 3 位偶数
本文介绍了两种解决“找出由给定数字数组中的三个不同元素组成的三位偶数”问题的方法。第一种方法是暴力枚举,通过三层嵌套循环遍历所有可能的数字组合,确保没有前导零且为偶数,并使用集合去重和排序。第二种方法利用计数数组统计每个数字的频率,通过回溯法构造符合条件的三位数,并使用集合自动去重和排序。两种方法均能有效解决问题,但第二种方法在效率上更优,尤其是在处理较大数据集时。原创 2025-05-14 14:00:00 · 1487 阅读 · 0 评论 -
力扣热题——统计平衡排列的数目
该问题要求将数字字符串重新排列,分为两部分,使得两部分的数字之和相等。解法一通过回溯法结合剪枝优化,预先计算阶乘和逆元数组,利用组合数学公式统计合法排列数。Java和C++实现中,通过降序排列和动态剪枝减少无效分支探索,最终计算合法排列数并对结果取模。解法二基于动态规划,定义状态并初始化,使用滚动数组优化空间,通过状态转移逻辑计算合法排列数,最终汇总结果并取模。两种方法均通过预处理和优化策略提高效率,但动态规划在空间复杂度上更具优势。原创 2025-05-13 14:00:00 · 626 阅读 · 0 评论 -
力扣热题——存在连续的三个奇数的数组
这篇文章介绍了如何判断一个整数数组中是否存在连续三个元素都是奇数的情况。通过遍历数组并检查每个连续的三元组,可以轻松实现这一功能。文章提供了Java、C++和C三种编程语言的实现代码,并详细解释了每种语言的差异和代码要点。核心思路是遍历数组,检查是否存在三个连续且均为奇数的元素。如果数组长度小于3,直接返回false。时间复杂度为O(n),仅需一次遍历。示例解释进一步说明了算法的应用场景和结果。原创 2025-05-12 14:00:00 · 936 阅读 · 0 评论 -
力扣热题——到达最后一个房间的最少时间 II
目录题目链接:3342. 到达最后一个房间的最少时间 II - 力扣(LeetCode)题目描述解法一:Dijkstra算法+贪心算法一、二、三、优先队列优化的Dijkstra算法四、主循环2. 主循环处理3. 时间计算逻辑五、正确性六、示例推演(以示例1为例)Java写法:C++写法:运行时间时间复杂度和空间复杂度解法二:Java写法:C++写法:运行时间时间复杂度和空间复杂度总结注:下述题目描述和示例均来自力扣有一个地窖,地窖中有 个房间,它们呈网格状排布。给你一个大小为 的二维数组 ,其中 表原创 2025-05-09 13:30:00 · 1004 阅读 · 0 评论 -
力扣热题——基于排列构建数组
这题要求基于给定的从0开始的排列nums,构建一个相同长度的新数组ans,其中每个元素ans[i]的值等于。那其实就是需要通过将nums中每个元素作为索引来访问nums自身,并将结果依次存入新数组ans中。原创 2025-05-07 13:30:00 · 862 阅读 · 0 评论 -
算法热题——多米诺和托米诺平铺
状态含义说明dp[i][0]前 i 列已经完全铺满dp[i][1]前 i 列已铺完,且第 i+1 列上面一个格子空着(顶部缺失)dp[i][2]前 i 列已铺完,且第 i+1 列下面一个格子空着(底部缺失)注意:状态1和2是一种中间状态,表示还没有完全铺满,但某些位置已经被覆盖了。因为瓷砖中包含了L 型(非矩形),所以我们必须考虑“未完全铺满”的中间状态。否则就无法处理这些“带缺口”的铺法。如果只有 Domino 瓷砖,那么只需要就可以解决问题(类似于斐波那契)。原创 2025-05-06 13:30:00 · 1571 阅读 · 0 评论 -
算法热题——等价多米诺骨牌对的数量
步骤描述1. 标准化将每个多米诺[a,b]转换为2. 哈希计数使用HashMap统计每种标准化牌出现的次数3. 计算配对每遇到一张牌,查看前面有多少张一样的,就是可以组成的对数解决思路:标准化处理:将每个多米诺[a, b]转换为固定顺序的形式。哈希表统计:使用哈希表记录每种标准化后的多米诺出现次数;对于每个新多米诺,检查哈希表中已有的相同类型数量,并计入结果。计数等价对:遍历数组,通过上述方法累计等价对总数。原创 2025-05-05 13:45:00 · 1017 阅读 · 0 评论 -
算法热题——行相等的最少多米诺旋转
通过旋转多米诺骨牌,使得所有骨牌的顶部(tops)或底部(bottoms)展示相同的数字,并返回达成此目标所需的最小旋转次数。如果无法实现,则返回-1。原创 2025-05-03 13:21:32 · 1123 阅读 · 0 评论 -
每天一道算法题——推多米诺
方法时间复杂度空间复杂度是否推荐双遍历法O(n)✅ 推荐,实现简单,效率高BFS 法O(n)✅ 推荐,逻辑清晰动态规划O(n)⭕ 可行,略复杂奥耶~~~~原创 2025-05-02 14:33:00 · 1088 阅读 · 0 评论 -
力扣热题——统计完全子数组的数目
完全子数组有:[1,3,1,2]、[1,3,1,2,2]、[3,1,2] 和 [3,1,2,2]。数组仅由整数 5 组成,所以任意子数组都满足完全子数组的条件。子数组的总数为 10。如果数组中的某个子数组满足下述条件,则称之为。注:下述题目描述和示例均来自力扣。是数组中的一个连续非空序列。原创 2025-04-27 13:15:00 · 742 阅读 · 0 评论 -
力扣热题——统计最大组的数目
总共有 4 个组拥有的数字并列最多。的每个整数 10 进制表示下的数位和(每一位上的数字相加),然后把数位和相等的数字放到同一个组中。请你统计每个组中的数字数目,并返回数字数目并列最多的组有多少个。总共有 2 个大小为 1 的组 [1],[2]。综上所述,空间复杂度主要由哈希表决定,大致为。因此,整体时间复杂度主要由前两步决定,为。是不同数位和的数量,而在最坏情况下,,但在实际情况中往往会更小。原创 2025-04-25 13:30:00 · 1090 阅读 · 0 评论 -
力扣最热一百题——二叉搜索树中第 K 小的元素
二叉搜索树的常规操作,寻找第n小的元素!!!新手也应该会的题目!!!原创 2025-04-18 13:30:00 · 715 阅读 · 0 评论 -
力扣热题——统计好三元组
这老手根本学不会了。搞个这么复杂的优化方案,比直接把暴力还慢。沟槽的测试用例,我给你个Z!!!原创 2025-04-15 09:00:00 · 817 阅读 · 0 评论 -
力扣热题——统计好的数字的数目
通过快速幂算法解决了大指数幂运算的问题。本质上是利用了数学性质和分治思想。原创 2025-04-18 09:00:00 · 760 阅读 · 0 评论 -
力扣热题——使数组的值全部为 K 的最少操作次数
中文题目部分的魅力在于题意的理解。读懂就能AC!!!原创 2025-04-17 13:00:00 · 1034 阅读 · 0 评论 -
力扣热题——使数组元素互不相同所需的最少操作次数
兄弟别学了,这道简单题你也包不会的。。。。原创 2025-04-15 13:00:00 · 890 阅读 · 0 评论 -
力扣热题——统计对称整数的数目
这你都不会啊???原创 2025-04-14 13:00:00 · 1055 阅读 · 0 评论 -
蓝桥杯API准备——Java板块
你捐款了吗原创 2025-04-12 13:31:43 · 1192 阅读 · 0 评论 -
力扣热题——分割等和子集(01背包的变体)
我嘞个逆天DP动态规划啊,这是人做的?你绝对不会!!!原创 2025-04-11 13:30:00 · 1917 阅读 · 0 评论