LeetCode 76最小覆盖子串:滑动窗口双指针详解
1. 题目到底在要什么别急着写代码先把需求看清楚做算法题最忌讳的就是打开题目页面就开始敲代码。LeetCode 76 这道“最小覆盖子串”乍一看就是“给两个字符串在 s 里找包含 t 全部字符的最短连续子串”但这里有几个坑第一眼不注意后面全得返工。先看清楚题目的几个关键限定要找的是 s 中的子串必须是连续的不能用 t 里的字符去拼一个不连续的东西。覆盖的意思是 t 里的每个字符都要出现且次数不能少于 t 中该字符的个数。比如 t AABC那 s 的子串里至少要有两个 A、一个 B、一个 C顺序不限。返回值是那个最短的子串本身不是长度也不是起始下标是截出来的那段字符串。如果不存在满足要求的子串返回空串。s 和 t 都可能为空t 为空时按惯例返回空串这点有些朋友不看题解根本想不到。很多人上来就想到“暴力枚举所有子串再逐个检查”这个思路不是错但复杂度直接爆炸。假设 s 长度是 m子串数量是 O(m²)每次检查又要遍历 t整体是 O(m²·n)m 稍微上到几千就基本跑不动了。而这道题的标准解法“滑动窗口”能把复杂度压到 O(m n)差距是指数级的。我第一次刷这题时也先写了个暴力版用于对拍验证那是可以的但千万别拿暴力版去提交会直接被判超时。再说一个容易被忽略的点t 里的字符不一定要在 s 中连续出现也不要求 s 的子串里这些字符的相对顺序和 t 一致。这一点在面试里特别容易被追问其实就是“覆盖”和“匹配”的区别。匹配是要求顺序一致的子序列或子串覆盖只要求字符种类和数量达标。理解清楚这个概念后面实现的时候就不会被“顺序”两个字带偏。另外题目虽然叫“最小覆盖子串”但本质上它是一个“满足约束条件下的最优化问题”。约束条件是字符覆盖达标优化目标是子串长度最小。这类问题在字符串处理的题目里是个大类掌握了 76 题的思路后面做“找到字符串中所有字母异位词”“无重复字符的最长子串”这些题都会顺很多。2. 为什么滑动窗口是正解从朴素想法到高效方案的推导路径我先讲一个生活化的类比你感受一下滑动窗口到底在干嘛。假设你在一个货架上找出一段连续的区域要求这段区域里包含三种指定水果而且每种数量都得达标。最简单粗暴的办法是把每个可能的连续区域都看一遍数一数里面的水果够不够。但仔细一想当窗口右边的水果足够了的时候窗口左边其实可以一点点往回收收的过程中如果发现某种水果不够了再往右扩展。这个“右边扩展、左边收缩”的过程就是滑动窗口的雏形。用专业的语言描述滑动窗口维护了 s 中的一个区间 [left, right]并通过两个指针的移动让这个区间始终保持某种“窗口内的状态”。对于这道题窗口内的状态可以定义为窗口里各字符的出现次数。那为什么这种“双指针移动”比枚举所有子串要快关键在于它去掉了大量不必要的重复计算。暴力枚举时每个子串都独立计算一遍字符频次但相邻子串之间其实只差一个字符。滑动窗口每次从右侧加一个字符、从左侧丢一个字符字符频次可以在常数时间内更新不需要从头再数一遍。我还想强调一个容易忽略的点滑动窗口并不是凭空冒出来的技巧它的成立依赖一个重要的性质——单调性。具体到这道题如果把 right 固定left 越往右窗口里的字符越少覆盖 t 的能力只会变弱不会变强。也就是说“窗口是否能覆盖 t”这件事随着 left 的右移一旦从“能”变成“不能”就不可能再变回“能”除非 right 继续往右走。正是这种单调性才允许我们用双指针线性扫描而不是回溯。我用一个例子模拟一下。s ADOBECODEBANCt ABCright 从 0 开始移动窗口慢慢扩大当 right 走到下标 5 时窗口 ADOBEC 包含了 A、B、C 各一个第一次满足覆盖条件。此时记录长度 6。尝试收缩 left。left 从 0 走到 1窗口变成 DOBECA 没了无法覆盖 t。说明当前 left 已经到极限停止收缩。right 继续向右移动窗口重新变得足够覆盖 t。当 right 走到下标 9 时窗口是 DOBECODEBA长度又变小了记录一下。继续收缩 left这次可以一直收缩到 left 指向下标 5字符 C窗口变为 ODEBA 到 BANC 之间的内容最终找到 BANC长度为 4。这个模拟过程其实就是整个算法的主干。你把这个过程亲手在纸上画一遍滑动窗口的代码就很好写了。3. 手写实现代码细节逐行拆解每一步都说清楚为什么先给出一个比较通用且易读的实现版本语言用 Python。如果你平时用 Java 或 C核心逻辑是一样的只是语法层面的差别。def minWindow(s: str, t: str) - str: if not s or not t: return # need 字典记录 t 中每个字符的需求量 need {} for ch in t: need[ch] need.get(ch, 0) 1 # window 字典记录当前窗口中各字符的数量 window {} left, right 0, 0 valid 0 # 表示窗口中满足“需求量”的字符种类数 start 0 min_len float(inf) while right len(s): # c 是移入窗口的字符 c s[right] right 1 # 更新窗口内字符计数 if c in need: window[c] window.get(c, 0) 1 if window[c] need[c]: valid 1 # 判断左侧窗口是否需要收缩 while valid len(need): # 更新最小覆盖子串 if right - left min_len: min_len right - left start left # d 是移出窗口的字符 d s[left] left 1 # 更新窗口内字符计数 if d in need: if window[d] need[d]: valid - 1 window[d] - 1 return if min_len float(inf) else s[start:start min_len]这段代码是滑动窗口模板的典型用法。我把它拆开讲每一处细节都有它存在的理由。3.1 两个字典的设计need 和 window 各自干什么need字典表示“目标状态”即 t 中各字符的需求量。window字典是“当前状态”即窗口内实际拥有的各字符数量。为什么不用一个字典搞定因为角色混淆。窗口里的字符如果不在 t 中我们根本不关心它出现了多少次但仍需要把它当作窗口的一部分来处理。用两个字典逻辑上清晰调试的时候打印出来也好排查。有人可能会问为什么不用数组代替字典如果字符集限定为小写英文字母用长度为 26 的数组确实更快内存也小。但这道题的字符没有限定ASCII 字符集最多 128 个Unicode 就更大了。用字典作为通用方案是对的面试时为了极致性能可以再降级成数组但讨论复杂度时不差这点差异。3.2 valid 变量的妙用避免每次都遍历字典如果你维护了window和need两个字典每次判断窗口是否满足覆盖条件时最直观的做法是遍历need逐个检查window[ch] need[ch]。但这个检查每次做一遍会额外引入 O(字符种类数) 的复杂度。虽然字符种类最多也就几十上百但没必要。valid变量记录的是“当前窗口中有多少个字符种类已经满足了需求”。注意是“种类数”不是“字符总数”。每当某个字符在窗口中的数量第一次达到需求量时valid加一反之当某个字符的数量从“等于需求量”跌到“小于需求量”时valid减一。窗口满足覆盖条件的充要条件变成valid len(need)这是一个 O(1) 判断。我当初学这个技巧的时候有一个疑惑如果窗口里字符数量超了valid不会变因为它只关注达到没有不关注超出多少。这一点很关键整个收缩过程就是要利用“超出不影响 valid”的特性让窗口尽可能收缩到刚好覆盖的状态。3.3 收缩窗口的时机为什么是 while 而不是 if当valid len(need)时当前窗口已经是一个可行解。为了找最短的那个我们要尝试把 left 尽量往右推看能不能在不破坏覆盖条件的前提下缩小窗口。所以这里必须用while循环一直收缩到条件不满足为止。每收缩一步就要更新一次答案。这时候可能有人会觉得反正最后一次收缩才得到最短的为什么每步都要更新因为并不是收缩得越狠窗口越小实际上收缩到临界点时窗口是“刚好覆盖”的状态肯定比刚开始可行时短但中间那几步也都可能是更短的候选者。比如从“超标很严重”收缩到“刚好覆盖”中间有多个窗口都满足覆盖我们要取长度最小的那个所以每个可行状态都要记录。3.4 收缩时先更新答案还是先移动 left代码里的顺序是先更新答案再移动 left。这两个操作如果反过来就会漏掉“当前窗口本身”这个可行解。有个很隐蔽的 bug如果先 left 1再判断收缩后的窗口是否满足条件并记录那么第一次满足条件的那个窗口就不会被记录因为它是在 left 移动之前满足的。别小看这个顺序我见过好几个版本的写法都栽在这里。3.5 返回值的处理用 start 和 min_len 回截子串在循环过程中我们只需要记录起始下标start和最小长度min_len最后统一截取s[start:startmin_len]。不要试图在循环过程中不断创建新子串那样会产生大量临时对象纯属浪费性能。等所有循环走完再用min_len判断是否存在可行解如果仍是inf说明无解返回空串。4. 复杂度分析与优化空间刷到 100% 的写法是什么样先说标准复杂度right 指针最多遍历 s 一次left 指针也最多遍历 s 一次整体是 O(m n)m 是 s 的长度n 是 t 的长度。空间上need最多存 n 个字符种类window最多存 m 个字符种类理论上限 O(m)但因为字符集合有限实际可视为常数级。这里有个细节值得展开为什么说 left 和 right 各自最多走 m 步因为 left 只会右移不会左移right 也只会右移不会左移它们之间既不会交错也不会回头。这正是滑动窗口算法“均摊线性”的核心原因。很多人在分析复杂度时笼统地说“两个循环嵌套应该不是线性吧”——本质原因就是内层 while 缩放的次数累加起来不会超过 m因为 left 单调递增。复杂度达标之后再聊聊实际性能优化。目前在力扣上有很多朋友追求“击败 100%”的写法常见的优化手段有用固定数组替代字典。把字符映射到 0~127 的下标window和need都用长度为 128 的 int 数组。这样读写比哈希表快得多内存也少。先对 s 做一次过滤。只保留出现在 t 中的字符把 s 压缩成一个新的数组记录每个位置对应的字符。这样滑动窗口移动时跳过了大量无关字符的检查。这个优化在 s 很长、t 很短时效果尤其明显。用valid和need_size的整数判断代替len(need)减少字典长度函数的调用次数。我试用过这些方法组合起来确实能从 50% 左右跑到 95% 以上。不过要注意这类微优化牺牲了一部分代码可读性面试时如果面试官没有明确要求极致性能优先写清晰版。性能优化是 nice-to-have不是必须。还有个小优化点容易被忽略当min_len len(t)时理论上已经不可能找到更短的覆盖子串了可以直接 break 跳出循环。虽然这种提前退出的机会不多但一旦出现收益是实打实的。我个人喜欢加上这个判断算是一种“榨干剩余价值”的习惯。5. 边界条件与易错点汇总这些坑我全踩过帮你排好雷了刷题最烦的莫过于“逻辑是对的但提交就是报错”。我把 76 题里常见的边界条件和高频错误列一张表照着自查能省不少事。场景预期行为容易写错的地方t 为空返回空串不判空直接进入循环可能返回 s 本身s 为空返回空串同上注意两个空的组合s 和 t 完全相同返回 s窗口第一次满足条件即 min_len s.length()收缩时不要误伤t 中字符在 s 中不存在返回空串循环结束后 min_len 仍为 inf忘记判 inf 会返回错误子串t 中字符重复较多s 中数量刚好够返回最短覆盖串在收缩阶段 valid 的增减要精确否则窗口收缩过头s 长度小于 t 长度返回空串用一个前置判断会更快退出但注意 s 短不代表一定无解即便 t 的每种字符 s 都有且够也不可能出现比 t 短的覆盖串所以可以直接判返5.1 死循环风险left 和 right 谁先动的问题滑动窗口最常见的 bug 不是数字算错而是指针没推进。right 每轮必须 1left 在 while 内部每轮必须 1。如果 while 内部漏写了 left 1一旦进入收缩循环就会无限循环。这种错误在编辑器里往往不报语法错但运行时会卡死。写完代码先跑一个超长字符串的用例如果程序没在预期时间内结束大概率就是这里出了问题。5.2 valid 的增减时机不对称性是最大难点注意我代码里的写法右移 right 时如果window[c] need[c]则valid 1左移 left 时如果window[d] need[d]则valid - 1如果你观察得仔细会发现右移时判断的是“等于”左移时判断的也是“等于”。这对应了“合法状态到不合法状态的切换点”。很多人会写成window[d] need[d]时减一或者window[c] need[c]时加一这样 valid 就不准了。具体推演一下假设 t 需要 2 个 A。当窗口里 A 的数量从 1 变成 2 时valid 加一因为 A 从不够变成刚好够当窗口里 A 从 2 变成 1 时valid 减一因为从够变成不够。如果 A 从 2 变成 3valid 不需要变化因为“够不够”的状态没变如果 A 从 3 变回 2valid 也不需要变化因为仍然是够的。所以 valid 只在跨越“刚好够”这条线的瞬间变动这就是“等于”比较的原因。5.3 Unicode 与特殊字符前面说了字典方案天然支持任意字符这个在本地自测时很实用。比如 s 里带中文、带 emoji 等Python 字符串处理都没问题。但如果你用数组方案就得格外小心Unicode 字符可能超出 128 的范围映射时会数组越界。简单方案是先用set(s t)做一次字符收集再给每个字符分配一个自增下标完成映射后再用数组。这样既享受数组的速度又不牺牲通用性。5.4 空串与空格字符串注意s 一个空格和s 是两种不同的输入。空格是有长度的合法字符t 里如果包含空格必须正常匹配不能因为“看起来是空”就提前返回。这个点很恶心本地调试时打印出来几乎看不出差别最容易把人搞晕。建议针对空格字符单独加一个测试用例。6. 变体题的迁移思路一个模板打穿多个高频题76 题是滑动窗口问题的“母题”它的框架稍作修改就能覆盖一批面试题。我总结一下常见的几个方向大家可以按这个路子去复习比刷十道不相关的题效率高得多。6.1 固定窗口大小的滑动窗口找到字符串中所有字母异位词题目要求“在 s 中找到所有 p 的异位词子串返回起始索引”。异位词的约束是子串长度必须等于 len(p)且字符种类和数量与 p 完全一致不能多也不能少。这时滑动窗口模板变一下窗口大小固定为 len(p)right 每移动一步left 必须跟着移动一步保持窗口大小恒定。valid 的判断条件依然是字符种类的满足数但收缩窗口的时机从“窗口覆盖 p”变成“窗口大小 len(p)”。判断 valid len(need) 时更新答案。这道题用 76 题的框架去套大概 5 分钟就能写出来。很多人觉得新题难其实只是窗口收缩条件换了一个。6.2 最长子串问题无重复字符的最长子串这道题的约束是“窗口内不能有重复字符”。此时我们不需要need字典只需要一个哈希表记录窗口内字符的频次。当某个字符的频次大于 1 时窗口不合法就要移动 left直到该字符频次恢复为 1。答案更新时机是在窗口合法的时候取right - left的最大值。它和 76 题的核心差异在于76 题收缩窗口是为了找最小合法解而这题收缩窗口是为了恢复合法性答案要在合法状态每次出现时更新。但同样是双指针 哈希表的框架理解这一点后代码几乎可以默写。6.3 最小覆盖子串的变体至少包含 k 个不同字符的最长子串这种题要求窗口内至少包含 k 个不同字符求最长子串。这时窗口里没有一个固定的目标字典但“合法条件”可以定义为一个新的状态变量比如unique_count k。收缩窗口的条件是unique_count k答案在合法状态时更新。思路框架一模一样只是“合法条件”和“收缩时机”换了。这也是为什么我一直建议把 76 题的模板吃透因为它把滑动窗口的骨架搭建好了剩下的就是根据题目条件改两行代码的事。6.4 多层约束包含 t 中所有字符且每个字符出现次数至少 k 次这种扩展可以把need字典里的每个 value 设成 k然后 valid 计数逻辑不变。整体复杂度还是 O(m n)只是语义上从“覆盖 t”变成“每个目标字符达到 k 次”。如果题目里还要求“窗口内不能出现某些字符”那就在更新窗口时对禁入字符做特判跳过。总之万变不离其宗。7. 工程实践里的额外思考这道题和业务代码有什么关系有人可能会想LeetCode 题刷再多工作中又不会让你手写最小覆盖子串。这个想法我理解但不太同意。滑动窗口这套东西在真实工程里的应用场景其实不少尤其是在日志分析、数据流处理和生物信息学这类领域。举几个例子日志序列分析有一段用户行为日志序列想找出“包含所有关键动作类型”的最短连续时间段。这本质上就是最小覆盖子串只是字符变成了动作类型。流量监控在一段时间窗口内要求至少覆盖几个指定的服务调用链找最短的观测窗口。同样是计数加滑窗。基因序列匹配在长 DNA 序列中找包含特定碱基组合的最短片段字符串可能特别长但滑动窗口算法依然线性可解。不只是这些领域日常处理字符串统计时如果你发现代码里频繁出现“for i 遍历所有起点for j 遍历所有终点”的两层循环十有八九可以用滑动窗口或前缀和优化。这种思维习惯才是刷题带来的真正收益。从工程角度看我还会额外注意代码的可读性和可测试性。上面给出的 Python 实现里我特意把need和window的更新逻辑写得对称、清晰方便后续维护者快速理解。真实项目里如果有人写一行超长表达式完成窗口更新即使性能再高review 时也容易被 Challenge。8. 写在最后的个人心得这题刷三次每次都该有不同的收获我第一次做 76 题的时候照着题解抄了一遍代码能跑通但完全没想明白 valid 的增减时机。第二次做试着不看题解默写写到收缩那一步卡住了才意识到自己对“合法状态切换点”的理解不够深。第三次做我开始自己推演边界条件把 t 为空、s 为空、重复字符等场景全过一遍才算真正把这题吃透。我个人建议刷这题时不要只看一遍题解就完事。拿一张纸把 s ADOBECODEBANC, t ABC 这个例子手动模拟 left、right、window、need、valid 五个变量的每一步变化。模拟完一遍你对滑动窗口的理解会从“背模板”变成“懂原理”。这个过程花不了二十分钟但效果比连刷十道同类型题都明显。最后分享一个小技巧本地调试时在每个关键节点打印left、right、window、valid这四个值用短例子跑一遍能快速定位到底是收缩条件错了还是 valid 更新错了。很多人觉得这种打印浪费时间其实在算法学习阶段这种“慢工出细活”的调试方式远比直接提交看红绿对勾更有价值。如果你正在准备面试76 题值得反复刷到“闭眼能写”的程度。因为它的模板可以直接迁移到多种字符串问题面试官也特别喜欢在这个框架上换条件进行变体追问。基础打牢了题目怎么变都不慌。

相关新闻

MATLAB可调试SVD分解实战包:Jacobi/QR/分治法三算法可控实现

MATLAB可调试SVD分解实战包:Jacobi/QR/分治法三算法可控实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:33:02 阅读更多 →
Apollo-11制导计算机源码数字化复原与仿真实践

Apollo-11制导计算机源码数字化复原与仿真实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:33:02 阅读更多 →
两串锂电池均衡方案:基于MP2642GR-Z与PIC32MZ的储能BMS设计

两串锂电池均衡方案:基于MP2642GR-Z与PIC32MZ的储能BMS设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:33:02 阅读更多 →

最新新闻

Linux下C/C++动静态库制作与使用实战指南

Linux下C/C++动静态库制作与使用实战指南

长期以来在Linux下做C/C开发,动静态库始终是绕不开的一个核心技能。无论是自己封装模块、分发二进制产物,还是处理第三方依赖,理解库的制作与使用直接决定了你在编译链接这块能不能少掉头发。我见过不少开发者写业务逻辑很熟练,一…

2026/10/15 4:26:50 阅读更多 →
Flutter鸿蒙开发实战:星座应用跨平台全流程解析

Flutter鸿蒙开发实战:星座应用跨平台全流程解析

1. 项目背景与整体设计思路1.1 为什么选 Flutter 做鸿蒙开发聊到跨平台开发,Flutter 这几年的热度一直在线。原因很简单——一套 Dart 代码,同时跑在 Android、iOS、Windows、macOS、Linux 上,现在还要加上鸿蒙。放在以前,鸿蒙应用…

2026/10/15 4:26:50 阅读更多 →
线上故障排查实战指南:从告警到恢复的黄金步骤

线上故障排查实战指南:从告警到恢复的黄金步骤

半夜两点被电话叫醒,睁开眼看到屏幕上一排红色告警,心跳直接拉满。这种场景,几乎所有做过线上系统的开发者都经历过。告警本身不可怕,可怕的是大脑一片空白,不知道该先点哪里,也不知道哪些命令能救命。这篇…

2026/10/15 4:26:50 阅读更多 →
基于SpringBoot+Vue的个人博客系统开发实战

基于SpringBoot+Vue的个人博客系统开发实战

1. 项目概述与整体技术选型1.1 这个博客系统到底解决了什么问题做个人博客这件事,看起来简单,真做起来坑不少。早期用现成框架,比如WordPress或者各类静态站点生成器,总觉得差了点什么——要么太重,装一堆插件才能用&a…

2026/10/15 4:26:50 阅读更多 →
共享内存IPC实战:从零拷贝原理到信号量同步,提升跨进程通信性能

共享内存IPC实战:从零拷贝原理到信号量同步,提升跨进程通信性能

共享内存(shm)这个老牌IPC方案,我最近在一个数据采集服务里又把它翻了出来。这个服务原本是跨进程传数据,管道和Unix域Socket用得挺顺手,可流量一起来,CPU占用就再也压不下去。换成共享内存之后&#xff0c…

2026/10/15 4:26:50 阅读更多 →
如何判断Ubuntu是否真的关机?三路检查方法与实战探测脚本

如何判断Ubuntu是否真的关机?三路检查方法与实战探测脚本

你有没有遇到过这种情况:在终端里输入了sudo shutdown now,屏幕上日志飞快滚动,最后一切归于黑暗,风扇也慢慢停转,你很自然地认为这台 Ubuntu 机器已经关机了。但我在几年的实践中发现,这个结论经常下得太早…

2026/10/15 4:25:50 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时,网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上,依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里,扩缩容到底难在哪做过大模型推理服务部署的人,大概都经历过这样的场景:一个团队共用一套推理集群,A 业务跑的是 7B 的小模型,B 业务跑的是 72B 的大模型,C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子:一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减,为了把启动时间压进两秒以内,我手贱地把一串自认为“没用”的 systemd 服务给 disable 了,其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →