<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>leetcode on Jeanphilo Blog</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/</link><description>Recent content in leetcode on Jeanphilo Blog</description><generator>Hugo -- 0.168.0</generator><language>zh-cn</language><lastBuildDate>Sat, 10 Oct 2026 10:00:00 +0800</lastBuildDate><atom:link href="https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/index.xml" rel="self" type="application/rss+xml"/><item><title>LeetCode 1282：用户分组，从相同容量分桶到满组即输出</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1282-group-the-people-given-the-group-size-they-belong-to/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1282-group-the-people-given-the-group-size-they-belong-to/</guid><description>从用户编号与组大小的区别出发，先按容量收集再分块，逐步写出满组即输出的 Python 解法，解释列表引用陷阱、正确性与线性复杂度。</description></item><item><title>LeetCode 609：在文件系统中查找重复文件，从解析记录到按内容分组</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/609-find-duplicate-file-in-system/</link><pubDate>Sat, 10 Oct 2026 10:00:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/609-find-duplicate-file-in-system/</guid><description>逐步解决 LeetCode 609：解析目录与文件描述，写出两两比较的正确基线，再按内容哈希分组，并分析路径拼接成本和真实文件系统的边界。</description></item><item><title>LeetCode 503：下一个更大元素 II，循环数组中的右侧到哪里结束</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/503-next-greater-element-ii/</link><pubDate>Mon, 20 Jul 2026 00:00:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/503-next-greater-element-ii/</guid><description>从循环数组的严格下一个更大元素定义出发，先写可验证的环形扫描，再推导只压入一次原始索引的线性单调栈解法。</description></item><item><title>LeetCode 191：位 1 的个数，如何跳过无关的零位</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/191-number-of-1-bits/</link><pubDate>Wed, 15 Jul 2026 00:00:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/191-number-of-1-bits/</guid><description>从逐位右移 baseline 出发，推导 n &amp;amp; (n - 1) 每次清除最低位的一个 1，并用循环 invariant 证明 LeetCode 191。</description></item><item><title>LeetCode 684：冗余连接，用 union 失败找到成环边</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/union-find/684-redundant-connection/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/union-find/684-redundant-connection/</guid><description>从树加一条边必然成环的压力出发，用并查集推导 LeetCode 684 冗余连接，讲清 1-indexed parent、union 返回值和为什么 union 失败就是答案。</description></item><item><title>LeetCode 70：爬楼梯，从 dp[i] 含义推出一维 DP</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/70-climbing-stairs/</link><pubDate>Sun, 03 May 2026 14:33:39 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/70-climbing-stairs/</guid><description>&lt;h2 id="题目要求"&gt;题目要求&lt;/h2&gt;
&lt;h3 id="输入输出"&gt;输入输出&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;输入：整数 &lt;code&gt;n&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;含义：爬到第 &lt;code&gt;n&lt;/code&gt; 阶楼顶&lt;/li&gt;
&lt;li&gt;每次可以爬 &lt;code&gt;1&lt;/code&gt; 或 &lt;code&gt;2&lt;/code&gt; 阶&lt;/li&gt;
&lt;li&gt;输出：返回到达楼顶的不同走法数量&lt;/li&gt;
&lt;li&gt;约束：&lt;code&gt;1 &amp;lt;= n &amp;lt;= 45&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="示例"&gt;示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：n = 2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：1+1，2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：n = 3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：3
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：1+1+1，1+2，2+1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这篇只用 Python，从 &lt;code&gt;dp[i]&lt;/code&gt; 的含义一步一步推出最终代码。&lt;/p&gt;
&lt;h2 id="从-n--3-的最后一步开始"&gt;从 &lt;code&gt;n = 3&lt;/code&gt; 的最后一步开始&lt;/h2&gt;
&lt;p&gt;先看最小能暴露转移的例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;n = 3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;到第 3 阶的最后一步只可能来自：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;第 2 阶，再走 1 阶&lt;/li&gt;
&lt;li&gt;第 1 阶，再走 2 阶&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以“到第 3 阶的方法数”不是凭空算出来的，而是来自两个更小的位置。&lt;/p&gt;
&lt;h2 id="step-1先定义更小的问题"&gt;Step 1：先定义更小的问题&lt;/h2&gt;
&lt;p&gt;直接问“到第 &lt;code&gt;n&lt;/code&gt; 阶有几种走法”太大。先定义：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;dp[i] = 到达第 i 阶的方法数
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;注意这里的 &lt;code&gt;i&lt;/code&gt; 是楼梯位置，不是数组下标含义上的第几个元素。&lt;/p&gt;</description></item><item><title>LeetCode 746：使用最小花费爬楼梯，从 top 位置推出 dp</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/746-min-cost-climbing-stairs/</link><pubDate>Sun, 03 May 2026 14:33:39 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/746-min-cost-climbing-stairs/</guid><description>&lt;h2 id="题目要求"&gt;题目要求&lt;/h2&gt;
&lt;h3 id="输入输出"&gt;输入输出&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;输入：整数数组 &lt;code&gt;cost&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;cost[i]&lt;/code&gt; 表示踩到第 &lt;code&gt;i&lt;/code&gt; 阶的代价&lt;/li&gt;
&lt;li&gt;每次可以爬 &lt;code&gt;1&lt;/code&gt; 或 &lt;code&gt;2&lt;/code&gt; 阶&lt;/li&gt;
&lt;li&gt;可以从下标 &lt;code&gt;0&lt;/code&gt; 或下标 &lt;code&gt;1&lt;/code&gt; 开始&lt;/li&gt;
&lt;li&gt;输出：返回到达楼顶的最小花费&lt;/li&gt;
&lt;li&gt;约束：&lt;code&gt;2 &amp;lt;= cost.length &amp;lt;= 1000&lt;/code&gt;，&lt;code&gt;0 &amp;lt;= cost[i] &amp;lt;= 999&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="示例"&gt;示例&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：cost = [10,15,20]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：15
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;解释：从下标 1 开始，付 15 后直接到达 top
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输入：cost = [1,100,1,1,1,100,1,1,100,1]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;输出：6
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="从-101520-的-top-位置开始"&gt;从 &lt;code&gt;[10,15,20]&lt;/code&gt; 的 top 位置开始&lt;/h2&gt;
&lt;p&gt;先看最小例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cost = [10,15,20]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;楼顶不是下标 &lt;code&gt;2&lt;/code&gt;，而是在最后一阶之后的位置，可以记为位置 &lt;code&gt;3&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;到达 top 位置 &lt;code&gt;3&lt;/code&gt; 的最后一步只可能来自：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;位置 &lt;code&gt;2&lt;/code&gt;，付 &lt;code&gt;cost[2]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;位置 &lt;code&gt;1&lt;/code&gt;，付 &lt;code&gt;cost[1]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这题最容易错的地方就在这里：我们要求的是“到达 top 的花费”，不是“到达最后一个下标的花费”。&lt;/p&gt;</description></item><item><title>LeetCode 216：组合总和 III（回溯 / 固定长度搜索）ACERS 解析</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/216-combination-sum-iii/</link><pubDate>Fri, 17 Apr 2026 14:31:14 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/216-combination-sum-iii/</guid><description>围绕 LeetCode 216 讲清固定长度组合搜索、1..9 有界候选集与只能使用一次的回溯写法，并从题目本身一步一步推出最终模板。</description></item><item><title>LeetCode 40：组合总和 II（回溯 / 同层去重 / 只能用一次）ACERS 解析</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/40-combination-sum-ii/</link><pubDate>Fri, 17 Apr 2026 14:31:11 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/40-combination-sum-ii/</guid><description>围绕 LeetCode 40 讲清“每个位置只能用一次”与“同层去重”的真正含义，并用一步一步推导的方式建立稳定回溯模板。</description></item><item><title>克隆图：哈希表 + DFS/BFS 实现无向图深拷贝（LeetCode 133）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/133-clone-graph/</link><pubDate>Thu, 19 Mar 2026 13:18:26 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/133-clone-graph/</guid><description>用原节点到新节点的映射表实现无向连通图深拷贝，覆盖 DFS 与 BFS 两种写法、环处理、正确性分析与多语言可运行实现。</description></item><item><title>相同的树（Same Tree）同步递归 / BFS ACERS 解析</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/100-same-tree/</link><pubDate>Sun, 15 Mar 2026 21:29:42 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/100-same-tree/</guid><description>围绕 LeetCode 100 讲清同步递归比较、队列成对校验与结构等价判断，附工程迁移与多语言实现。</description></item><item><title>反转链表 II（Reverse Linked List II）哑节点+头插法 ACERS 解析</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/92-reverse-linked-list-ii/</link><pubDate>Tue, 10 Feb 2026 09:56:14 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/92-reverse-linked-list-ii/</guid><description>在单链表中仅反转区间 [left, right]：用哑节点定位前驱，再用头插法原地重排，时间 O(n)、额外空间 O(1)，附工程思路与多语言实现。</description></item><item><title>固定间距 1 检测：一次扫描判断 1 之间至少 k 个间隔（LeetCode 1437）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1437-check-if-all-ones-are-at-least-k-places-away/</link><pubDate>Thu, 22 Jan 2026 09:12:14 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1437-check-if-all-ones-are-at-least-k-places-away/</guid><description>用一次扫描判断所有 1 之间是否至少相隔 k 个位置，含工程场景、常见误区与多语言实现。</description></item><item><title>判断一个数是否为 2 的幂（Power of Two）：位运算 O(1) ACERS 解析（LeetCode 231）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/231-power-of-two/</link><pubDate>Wed, 21 Jan 2026 13:22:53 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/231-power-of-two/</guid><description>用位运算 O(1) 判断整数是否为 2 的幂，含工程场景、常见误区与多语言实现。</description></item><item><title>LeetCode 1456：最大元音子串数量的滑动窗口 ACERS 解析</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1456-maximum-number-of-vowels-in-a-substring-of-given-length/</link><pubDate>Tue, 20 Jan 2026 13:40:45 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1456-maximum-number-of-vowels-in-a-substring-of-given-length/</guid><description>用固定滑动窗口在 O(n) 时间求最大元音子串数量，含工程迁移与多语言实现。</description></item><item><title>LeetCode 1513：仅含 1 的子串数量（连续 1 子串计数）ACERS 解析</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1513-number-of-substrings-with-only-ones/</link><pubDate>Sun, 18 Jan 2026 18:42:59 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1513-number-of-substrings-with-only-ones/</guid><description>用连续段在线统计在 O(n) 时间计算仅含 1 的子串数量，含工程场景与多语言实现。</description></item><item><title>数据结构基础：好数对计数（Number of Good Pairs）哈希统计 ACERS 解析（LeetCode 1512）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1512-number-of-good-pairs/</link><pubDate>Tue, 30 Dec 2025 11:40:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/1512-number-of-good-pairs/</guid><description>用哈希计数一遍扫描解决好数对（Good Pairs）问题，附工程场景、复杂度对比与多语言实现。</description></item><item><title>咒语与药水的成功组合：排序 + 二分查找秒杀乘积约束问题（LeetCode 2300）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2300-successful-pairs-of-spells-and-potions/</link><pubDate>Thu, 04 Dec 2025 10:50:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2300-successful-pairs-of-spells-and-potions/</guid><description>给定 spells 和 potions 两个数组以及 success 阈值，如何用排序 + 二分查找在 O((n+m)log m) 时间内求出每个咒语能与多少药水形成乘积 ≥ success 的成功组合，并给出多语言实现与工程应用示例。</description></item><item><title>固定长度子数组 + 至少 m 个不同元素：几乎唯一子数组的最大和（LeetCode 2841）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2841-maximum-sum-of-almost-unique-subarray/</link><pubDate>Thu, 04 Dec 2025 10:40:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2841-maximum-sum-of-almost-unique-subarray/</guid><description>给定整数数组 nums 和正整数 m、k，要求在所有长度为 k、且至少包含 m 个不同元素的子数组中，找到最大和；若不存在返回 0。本文用滑动窗口 + 计数哈希表推导 O(n) 解法，并提供多语言实现与工程应用示例。</description></item><item><title>最少涂色次数拿到 k 个连续黑块：滑动窗口的极简解法（LeetCode 2379）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2379-minimum-recolors-to-get-k-consecutive-black-blocks/</link><pubDate>Thu, 04 Dec 2025 10:30:00 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/2379-minimum-recolors-to-get-k-consecutive-black-blocks/</guid><description>给定只包含 W/B 的字符串 blocks，每次可将一个 W 涂成 B，如何用一次线性扫描求出得到至少一次连续 k 个黑色块的最少操作次数，并给出多语言实现与工程应用示例。</description></item><item><title>一位与两位编码解析的刷题笔记与工程应用全解析（续集，LeetCode 717）</title><link>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/717-1-bit-and-2-bit-characters/</link><pubDate>Tue, 18 Nov 2025 23:43:17 +0800</pubDate><guid>https://jeanphilogong.github.io/jeanblog/zh/alg/leetcode/717-1-bit-and-2-bit-characters/</guid><description>&lt;h1 id="一位与两位编码解析的刷题笔记与工程应用全解析续集leetcode-717"&gt;&lt;strong&gt;一位与两位编码解析的刷题笔记与工程应用全解析（续集，LeetCode 717）&lt;/strong&gt;&lt;/h1&gt;
&lt;h2 id="副标题--摘要"&gt;&lt;strong&gt;副标题 / 摘要&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;本文解析 LeetCode《1-bit and 2-bit Characters》题目，讲解如何用简单的指针跳跃算法解析二进制编码序列，并展示该算法在通信协议、数据格式解析、事件流处理等工程场景中的真实应用。适合希望将算法题知识迁移到工程系统的开发者。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="目标读者"&gt;&lt;strong&gt;目标读者&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;刷 LeetCode、准备技术面试的开发者&lt;/li&gt;
&lt;li&gt;对通信协议、序列解析、数据流处理感兴趣的工程师&lt;/li&gt;
&lt;li&gt;想提升“抽象能力与工程迁移能力”的同学&lt;/li&gt;
&lt;li&gt;从事监控、序列分析、协议解析等工作的后端开发者&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="背景--动机为什么这题值得写一篇博客"&gt;&lt;strong&gt;背景 / 动机：为什么这题值得写一篇博客？&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;乍一看，这道题好像只是简单判断：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;一个由 0/1 组成的编码流，最后一个 0 是否单独构成一个 1 位字符？&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;但本质上它对应的是 &lt;strong&gt;“变长编码（Variable-Length Coding）解析”&lt;/strong&gt;，而变长编码在工程中极其常见，比如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;UTF-8 字符解析&lt;/li&gt;
&lt;li&gt;网络包头编码解析&lt;/li&gt;
&lt;li&gt;字节码指令流解析&lt;/li&gt;
&lt;li&gt;数据压缩（如 Huffman Coding）&lt;/li&gt;
&lt;li&gt;通信协议中的 Frame 解析&lt;/li&gt;
&lt;li&gt;行为序列中用跳表式结构编码的事件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;因此，这道题不仅是算法题，更是“从左向右解析变长编码的模型题”。&lt;/p&gt;
&lt;p&gt;理解这题，就是理解大量系统底层的基础。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="核心概念"&gt;&lt;strong&gt;核心概念&lt;/strong&gt;&lt;/h2&gt;
&lt;h3 id="1-变长编码variable-length-encoding"&gt;&lt;strong&gt;1. 变长编码（Variable-Length Encoding）&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;题目中规定了两种编码：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;1 位字符&lt;/strong&gt;：&lt;code&gt;0&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;2 位字符&lt;/strong&gt;：&lt;code&gt;10&lt;/code&gt; 或 &lt;code&gt;11&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这是一种简化的变长编码结构：字符长度取决于首位。&lt;/p&gt;
&lt;p&gt;工程中常见：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;系统&lt;/th&gt;
&lt;th&gt;变长规则&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;UTF-8&lt;/td&gt;
&lt;td&gt;1~4 字节，根据前缀位判断长度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;TLV 协议&lt;/td&gt;
&lt;td&gt;T + 长度字段决定 Value 长度&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;字节码流&lt;/td&gt;
&lt;td&gt;opcode 决定后续参数个数&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;硬件指令集&lt;/td&gt;
&lt;td&gt;有变长和固定长度两类&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;题目正是这些系统的「极简模型」。&lt;/p&gt;</description></item></channel></rss>