推荐阅读
- 先读高频题型概览与标准模板
- 再按分类刷题并记录可复用思路
- 最后复盘错题,形成个人题库
这里是 Hot100 系列的合集页。每题统一按 ACERS 模板写作,强调“题解模板化 + 工程场景迁移 + 多语言实现”。 推荐阅读 先从数组 / 哈希 / 前缀和等高频主题开始 每题掌握一个可复用的“方法模型” 做完题后再回到工程场景,强化迁移能力
副标题 / 摘要 这是“连续 1 子串计数”的标准题:用 cur 维护以当前位置结尾的连续 1 长度即可在线累加答案。本文按 ACERS 模板给出清晰模型、工程场景与多语言实现。 预计阅读时长:10~12 分钟 标签:计数、字符串、连续段 SEO 关键词:Number of Substrings With Only 1s, 连续1子串, LeetCode 1513 元描述:在线统计连续 1 子串数量的 O(n) 解法与工程化应用。 目标读者 正在刷 LeetCode / 准备面试的同学 想建立“连续段计数”模板的中级开发者 做日志分析、监控与行为统计的工程师 背景 / 动机 “只含 1 的连续子串数量”看似简单,但它对应一类非常常见的工程统计: 连续事件强度、稳定性评分、连续活跃天数、心跳连续正常等。 掌握这题等于掌握“连续段贡献计数”的可复用模型。 核心概念 连续子串:必须连续,不能跳过元素 连续段(run):一段连续的 1 在线累加(cur 模型):记录以当前位置结尾的连续 1 长度 取模:答案可能很大,需要取 1e9+7 A — Algorithm(题目与算法) 题目重述 给你一个二进制字符串 s,请返回 仅由字符 ‘1’ 组成的子串 的数量。 子串要求连续且非空。 输入输出 名称 类型 描述 s string 只包含 ‘0’ 和 ‘1’ 返回 int 仅含 1 的子串数量(取模) 示例 s = "0110111" 输出 = 9 解释:连续 1 段为长度 2 和 3,贡献分别为 3 和 6,总和 9。 ...
副标题 / 摘要 这是“数据结构基础”系列第 2 题:好数对计数。通过“频次统计 + 组合计数”,把 O(n^2) 直接降到 O(n),并给出可直接迁移到工程的实现方式。 预计阅读时长:8~10 分钟 标签:哈希表、计数、数组 SEO 关键词:Good Pairs, 好数对, hash map, frequency, 计数 元描述:好数对计数的哈希表解法与工程化应用,含复杂度分析与多语言代码。 目标读者 刚开始学习哈希表与计数思想的初学者 希望把刷题方法迁移到业务统计的中级工程师 准备面试,想掌握基础计数模型的同学 背景 / 动机 “找出相同元素的两两组合数量”是一个常见的计数类问题。 在数据去重、行为分析、错误归因等场景里,这类问题通常会被反复遇到。 若用双重循环计算,复杂度是 O(n^2);一旦数据规模扩大就会变慢。 因此需要一个可线性扩展的方案。 A — Algorithm(题目与算法) 题目还原 给你一个整数数组 nums。 如果一组数字 (i, j) 满足 nums[i] == nums[j] 且 i < j,就称为一个 好数对。 返回好数对的数目。 输入输出 名称 类型 描述 nums int[] 整数数组 返回 int 好数对数量 基础示例 nums 输出 说明 [1, 2, 3, 1, 1, 3] 4 (0,3) (0,4) (3,4) (2,5) [1, 1, 1, 1] 6 C(4,2) = 6 [1, 2, 3] 0 无重复 直观图示(示例 1) ...
副标题 / 摘要 一道典型的“乘积 ≥ 阈值”计数题,看起来像是 O(n²) 的双重循环,实际上用「排序 + 二分查找」就能把复杂度压到 O((n+m)log m)。本文从题意抽象、核心公式到多语言实现,带你把这类阈值匹配问题彻底吃透。 预计阅读时长:10~15 分钟 适用场景标签:二分查找、排序计数、阈值匹配 SEO 关键词:spells and potions, successful pairs, 二分查找, lower_bound, 乘积约束 目标读者与背景 目标读者 已熟悉基本二分查找,想提升「在有序数组上做计数」能力的同学 后端 / 算法工程师,经常处理阈值判断与配对统计的问题 准备技术面试,希望积累“排序 + 二分”模板的开发者 为什么这题值得单独写一篇? 它把一个表面 O(n²) 的「所有配对」问题,转化成了对有序数组的二分计数; 公式非常典型:把 a * b ≥ success 转成 b ≥ ceil(success / a); 这种思路在推荐系统、风控额度、资源匹配等业务里屡见不鲜。 A — Algorithm(题目与算法) 题目重述 给定两个整数数组 spells 和 potions,以及一个正整数 success。 对于每个咒语 spells[i],我们定义它与药水 potions[j] 的组合是“成功”的,当且仅当: spells[i] * potions[j] >= success 请返回一个数组 ans,其中 ans[i] 表示第 i 个咒语可以与多少个药水形成成功组合。 ...
副标题 / 摘要 一道看似麻烦的子数组题:长度必须固定为 k,元素种类又要至少 m 个,还要在满足约束下让子数组和最大。本文通过「固定窗口滑动 + 计数哈希表」,构造 O(n) 级别的简洁算法,并给出多语言实现与工程实践案例。 预计阅读时长:12~15 分钟 适用场景标签:滑动窗口进阶、distinct 计数、子数组最大和 SEO 关键词:almost unique subarray, at least m distinct, sliding window, subarray max sum 目标读者与背景 目标读者 已经掌握基础滑动窗口(如「最长无重复子串」)的刷题同学 后端 / 数据分析工程师,需要在数组或数据流上做实时统计 准备中高级面试,希望写出更工程化解法的开发者 问题背景 / 动机 许多业务都有类似需求: 推荐系统:固定长度的推荐位里,既要保证足够多的不同品类,又希望整体评分尽量高; 监控系统:在最近的固定时间窗口里,要求至少有 m 个不同指标处于活跃状态; 行为分析:在 k 次连续行为中,至少访问 m 个不同页面,且总价值最大。 本题正是这类需求的抽象版,非常适合用来练习滑动窗口 + 计数哈希表的组合技。 A — Algorithm(题目与算法) 题目重述 给定整数数组 nums,正整数 m 和 k。 如果一个长度为 k 的子数组中至少包含 m 个不同的元素,则称其为“几乎唯一子数组(almost unique subarray)”。 请在所有几乎唯一子数组中,找到元素和的最大值;如果不存在这样的子数组,则返回 0。 输入 ...
副标题 / 摘要 一道看似暴力 O(n·k) 的刷题小题,实际只需要一个固定长度滑动窗口就能在 O(n) 内秒杀。本文从题意还原、窗口建模,到多语言实现与工程场景,把这类「固定长度窗口 + 计数」问题一网打尽。 预计阅读时长:8~10 分钟 适用场景标签:滑动窗口、字符串处理、面试刷题 SEO 关键词:LeetCode 2379, minimum recolors, sliding window, k consecutive black blocks 目标读者与背景 目标读者 正在系统刷 LeetCode / 力扣、想提升滑动窗口题目通过率的开发者 面试中经常被「固定窗口 + 计数」卡住的同学 想把算法题思路迁移到业务代码中的后端 / 前端工程师 为什么这个问题值得认真写一篇? 它是滑动窗口最基础的形态:窗口长度固定,维护一个简单计数。 很多更难的题(如「最长连续 1」、「至少 k 个元素」等)都可以退化到这个模板。 工程里也经常遇到类似需求:连续 k 个时间片、连续 k 条日志、连续 k 个卡片槽位是否满足某种条件。 A — Algorithm(题目与算法) 题目描述(用自己的话再说一遍) 给你一个只包含 'W'(白块)和 'B'(黑块)的字符串 blocks,还有一个整数 k。 你可以进行若干次操作,每次操作: 选择一个位置,如果那里是 'W',就可以把它涂成 'B'。 目标是: 通过涂色,让字符串中出现至少一次长度为 k 的连续黑色块(k 个连续 'B'),并且总操作次数最少。问最少要涂几次? 输入 blocks: str,只包含字符 'W' 和 'B' k: int,目标连续黑块长度,1 ≤ k ≤ len(blocks) 输出 ...
一位与两位编码解析的刷题笔记与工程应用全解析(续集,LeetCode 717) 副标题 / 摘要 本文解析 LeetCode《1-bit and 2-bit Characters》题目,讲解如何用简单的指针跳跃算法解析二进制编码序列,并展示该算法在通信协议、数据格式解析、事件流处理等工程场景中的真实应用。适合希望将算法题知识迁移到工程系统的开发者。 目标读者 刷 LeetCode、准备技术面试的开发者 对通信协议、序列解析、数据流处理感兴趣的工程师 想提升“抽象能力与工程迁移能力”的同学 从事监控、序列分析、协议解析等工作的后端开发者 背景 / 动机:为什么这题值得写一篇博客? 乍一看,这道题好像只是简单判断: 一个由 0/1 组成的编码流,最后一个 0 是否单独构成一个 1 位字符? 但本质上它对应的是 “变长编码(Variable-Length Coding)解析”,而变长编码在工程中极其常见,比如: UTF-8 字符解析 网络包头编码解析 字节码指令流解析 数据压缩(如 Huffman Coding) 通信协议中的 Frame 解析 行为序列中用跳表式结构编码的事件 因此,这道题不仅是算法题,更是“从左向右解析变长编码的模型题”。 理解这题,就是理解大量系统底层的基础。 核心概念 1. 变长编码(Variable-Length Encoding) 题目中规定了两种编码: 1 位字符:0 2 位字符:10 或 11 这是一种简化的变长编码结构:字符长度取决于首位。 工程中常见: 系统 变长规则 UTF-8 1~4 字节,根据前缀位判断长度 TLV 协议 T + 长度字段决定 Value 长度 字节码流 opcode 决定后续参数个数 硬件指令集 有变长和固定长度两类 题目正是这些系统的「极简模型」。 ...