首页
/ Tech Interview Handbook 五周 50 题算法练习计划:Blind 75 作者的 Best Practice Questions 全解

Tech Interview Handbook 五周 50 题算法练习计划:Blind 75 作者的 Best Practice Questions 全解

2026-09-04 09:18:12作者:范靓好Udolf

本文为 Tech Interview Handbook(技术面试手册)仓库中「Best practice questions」文档的完整展开。它给出了 Blind 75 作者(即本手册作者)精选的 50 道算法题、按 5 周排布的练习计划与各周考察重心,并结合仓库源码说明这份题单在 Docusaurus 网站中的数据结构、渲染方式及其与 12 周学习计划、Grind 75 工具的衔接关系。读完本文,你将获得一份可直接执行的算法刷题日程,以及按主题查阅算法速查表和进阶资料的完整路径。

为什么只刷"精选"的题

LeetCode 上有一千多道题,盲目全刷对时间紧张的工程师并不现实。本手册作者在多年前从自己的 freeCodeCamp 文章中提炼出最重要的 75 题并在社区分享,这份列表后来在编码面试圈爆红,被大家命名为 Blind 75——作者本人就是用这份列表完成了自己上一次求职,只做了"重要的题"。

在 Blind 75 流传多年之后,作者又将其进一步蒸馏为 50 题,并排布为一份 5 周复习练习计划(源文档:best-practice-questions.md)。作者的核心观点是:大多数 LeetCode 题目都是这几十道核心题中各种技术点的组合,因此先把这些"母题"吃透,再遇到变体题时才能举一反三。

作者在原文中给出的练习原则值得单独强调:

  • 像真实面试一样对待每一题:提交前彻底检查代码,而不是只跑通样例;
  • 手动构造测试用例:自己编造若干输入(包括边界输入)在脑中或纸上推演一遍,验证正确性;
  • 进度追踪:作者为除 Premium 题外的题目建了一份 LeetCode 列表用于跟踪进度;仓库同时提供了可自行定制题单的 Grind 75 工具(见后文"题单在仓库中的实现")。

5 周计划总览

5 周的编排遵循"先序列、再数据结构、后动态规划"的难度爬坡逻辑,每周有明确的主题目标:

周次 主题 考察重心 必做题数 可选题数
第 1 周 Sequences(序列) 数组与字符串,易中混合热身,打牢基本功 10 2
第 2 周 Data structures(数据结构) 链表、字符串、矩阵;滑动窗口、链表/矩阵遍历等惯用套路 11 0
第 3 周 Non-linear data structures(非线性数据结构) 树、图、堆;各种树遍历(前/中/后序)与 BFS/DFS 9 4
第 4 周 More data structures(更多数据结构) 在前 3 周基础上提升难度;堆、Trie 等较少见但仍会被问到的结构 10 5
第 5 周 Dynamic programming(动态规划) 记忆化(memoization)与回溯(backtracking);ROI 较低,时间充裕者再做 10 0

说明:原表格中的 LeetCode 题面链接均为站外地址,本文按规范省略链接列;只需按题名在 LeetCode 中搜索即可找到对应题目。标注 (Premium) 的题目为 LeetCode 付费题,作者公开维护的 LeetCode 列表未包含它们。

第 1 周 - 序列:数组与字符串热身

第 1 周用数组和字符串的 Easy/Medium 题热身。作者指出:数组和字符串是面试中出现频率最高的题型类别,熟悉它们能帮助你建立扎实的基本功,从而更好处理更难的题目。

必做(10 题)

题目 难度
Two Sum(两数之和) Easy
Contains Duplicate(含重复项) Easy
Best Time to Buy and Sell Stock(买卖股票的最佳时机) Easy
Valid Anagram(有效的字母异位词) Easy
Valid Parentheses(有效的括号) Easy
Maximum Subarray(最大子数组和) Easy
Product of Array Except Self(除自身以外数组的乘积) Medium
3Sum(三数之和) Medium
Merge Intervals(合并区间) Medium
Group Anagrams(字母异位词分组) Medium

可选(2 题)

题目 难度
Maximum Product Subarray(最大乘积子数组) Medium
Search in Rotated Sorted Array(搜索旋转排序数组) Medium

从题面构成看,这一周覆盖了哈希表(Two Sum、Contains Duplicate)、滑动窗口(Maximum Subarray 的 Kadane 思路、3Sum 的双指针)、区间排序(Merge Intervals)等后续周次会反复用到的核心套路,"热身"实为铺垫。

第 2 周 - 数据结构:链表、字符串与矩阵

第 2 周聚焦链表、字符串和基于矩阵的题目。目标是掌握处理链表的常见操作、矩阵遍历,以及序列分析(数组/字符串)技术——尤其是滑动窗口、链表遍历和矩阵遍历。

必做(11 题)

题目 难度
Reverse a Linked List(反转链表) Easy
Detect Cycle in a Linked List(环形链表) Easy
Container With Most Water(盛最多水的容器) Medium
Find Minimum in Rotated Sorted Array(寻找旋转排序数组中的最小值) Medium
Longest Repeating Character Replacement(替换后的最长重复字符) Medium
Longest Substring Without Repeating Characters(无重复字符的最长子串) Medium
Number of Islands(岛屿数量) Medium
Remove Nth Node From End Of List(移除链表倒数第 N 个节点) Medium
Palindromic Substrings(回文子串) Medium
Pacific Atlantic Water Flow(太平洋大西洋水流问题) Medium
Minimum Window Substring(最小窗口子串) Hard

这一周出现了全计划中的第一道 Hard 题(Minimum Window Substring),它是滑动窗口套路的"完全体",与前面的 Longest Repeating Character Replacement、Longest Substring Without Repeating Characters 构成同一模式的难度阶梯;而 Number of Islands 与 Pacific Atlantic Water Flow 则是矩阵上 DFS/BFS 的两道典型题,直接为第 3 周的图论内容做铺垫。

第 3 周 - 非线性数据结构:树、图与堆

第 3 周聚焦树、图、堆等非线性数据结构。作者要求你熟悉各种树遍历(中序、前序、后序)算法以及图遍历算法(BFS 广度优先搜索、DFS 深度优先搜索),并给出一条经验判断:在实际面试中使用更高级的图算法(Dijkstra、Floyd-Warshall)相当罕见,通常没有必要——把 BFS/DFS 和拓扑排序练熟即可。

必做(9 题)

题目 难度
Invert/Flip Binary Tree(翻转二叉树) Easy
Validate Binary Search Tree(验证二叉搜索树) Medium
Non-overlapping Intervals(无重叠区间) Medium
Construct Binary Tree from Preorder and Inorder Traversal(从前序与中序遍历序列构造二叉树) Medium
Top K Frequent Elements(前 K 个高频元素) Medium
Clone Graph(克隆图) Medium
Course Schedule(课程表) Medium
Serialize and Deserialize Binary Tree(序列化与反序列化二叉树) Hard
Binary Tree Maximum Path Sum(二叉树中的最大路径和) Hard

可选(4 题)

题目 难度
Maximum Depth of Binary Tree(二叉树的最大深度) Easy
Same Tree(相同的树) Easy
Binary Tree Level Order Traversal(二叉树层序遍历) Medium
Encode and Decode Strings(字符串的编码与解码) Medium(Premium)

Course Schedule(课程表)是拓扑排序的代表题,Clone Graph 考查图的 DFS/BFS + 哈希表去重,两者与仓库中 Grind 75 数据里 topo-sortdepth-first-searchbreadth-first-search 等 routines 标签直接对应(见下文"题单在仓库中的实现")。

第 4 周 - 更多数据结构:难度爬坡

第 4 周在前几周知识基础上提升题目难度——作者提醒,面试中大概率会遇到这个量级的题目。你会更多接触到**堆(heap)Trie(前缀树)**这些出现频率较低、但依然会被问到的数据结构。

必做(10 题)

题目 难度
Subtree of Another Tree(另一棵树的子树) Easy
Lowest Common Ancestor of BST(二叉搜索树的最近公共祖先) Easy
Implement Trie (Prefix Tree)(实现前缀树) Medium
Add and Search Word(添加与搜索单词) Medium
Kth Smallest Element in a BST(二叉搜索树中第 K 小的元素) Medium
Merge K Sorted Lists(合并 K 个升序链表) Hard
Find Median from Data Stream(数据流的中位数) Hard
Insert Interval(插入区间) Medium
Longest Consecutive Sequence(最长连续序列) Medium
Word Search II(单词搜索 II) Hard

可选(5 题,均为 Premium)

题目 难度
Meeting Rooms(会议室) Easy(Premium)
Meeting Rooms II(会议室 II) Medium(Premium)
Graph Valid Tree(图的有效树) Medium(Premium)
Number of Connected Components in an Undirected Graph(无向图的连通分量数) Medium(Premium)
Alien Dictionary(外星词典) Hard(Premium)

这一周的三题 Hard(Merge K Sorted Lists、Find Median from Data Stream、Word Search II)分别对应堆的两个经典应用(多路归并、对顶堆求中位数)以及 Trie 上的 DFS 组合搜索,正好落实了作者"堆和 Trie 较少见但仍会被问到"的判断。

第 5 周 - 动态规划:低 ROI 但不可避免

第 5 周专攻动态规划(DP)。作者作为面试官给出了坦率的自我评价:他本人并不喜欢 DP 题——它们与实际工程场景关联不大,如果面试中被要求做很难的 DP 题,他"可能拿不到 offer"。但像 Google 这样的公司仍然会问 DP,因此如果你的目标是 Google,DP 不可避免

作者给出的 DP 备考建议:

  • DP 题较难掌握,提升的唯一方法就是——练习;
  • 务必熟悉 memoization(记忆化)backtracking(回溯) 两个概念,它们是从递归过渡到 DP 的桥梁;
  • 实际来看,投入大量时间钻研 DP 的投资回报率(ROI)很低,因此 DP 属于"次优先/可选"模块:只在你时间宽裕、且希望全面覆盖(尤其是面 Google)时再做。

必做(10 题)

题目 难度
Climbing Stairs(爬楼梯) Easy
Coin Change(零钱兑换) Medium
Longest Increasing Subsequence(最长递增子序列) Medium
Combination Sum(组合总和 IV) Medium
House Robber(打家劫舍) Medium
House Robber II(打家劫舍 II) Medium
Decode Ways(解码方法) Medium
Unique Paths(不同路径) Medium
Jump Game(跳跃游戏) Medium
Word Break(单词拆分) Medium

从题面构成看,这 10 题覆盖了 DP 的几个基本流派:一维递推(Climbing Stairs、House Robber)、状态机/区间 DP(House Robber II 的环形特判、Decode Ways 的解码歧义)、完全背包类(Coin Change、Combination Sum IV)以及网格 DP(Unique Paths)。若希望体系化补强 DP,仓库课程组件中列出了专题课程(见AlgorithmCourses.md,含 "Grokking the Dynamic Programming Patterns for Coding Interviews")。

题单在仓库中的实现:数据、渲染与工具链

理解这份题单是如何在仓库中落地,有助于你验证题单内容、扩展练习或理解 Grind 75 工具的原理。

结构化题库:QuestionGroups.json

5 周计划之外,仓库还维护了一份结构化的 8 周 75 题题库 QuestionGroups.json(Week 1 ~ Week 8),它是 12 周学习计划中第 5~12 周练习部分的数据源。每条题目标题包含以下字段:

字段 含义 示例
slug / title 题目 slug 与显示名 two-sum / Two Sum
url LeetCode 题面地址 —(站外链接,此处不展示)
duration 建议练习时长(分钟) 15
epi EPI(程序员面试金书)中的难度分(0~3,null 表示未收录) 3
difficulty LeetCode 难度 Easy / Medium / Hard
id LeetCode 题号 1
topic 所属主题 array、string、graph、heap、trie、dynamic-programming 等
routines 考察的算法套路标签 hashingsliding-windowtopo-sortunion-findmonotonic-stack

例如 two-sum 标注为 topic: arrayroutines: ["hashing"]course-schedule 标注 routines: ["topo-sort"]number-of-islands 标注 ["depth-first-search", "breadth-first-search"]。这套 topic + routines 标签体系与算法速查表的主题划分(Array、String、Graph、Heap、Trie、Interval 等)一一对应,也就是说:5 周题单是"精选子集",QuestionGroups.json 是"全量题库 + 主题/套路元数据",两者共用同一套主题语言。

渲染逻辑:QuestionList.js

QuestionList.js 负责把 JSON 渲染成网页表格:它遍历 Object.entries(QuestionGroups),用 <h4>Week {index + 5}</h4> 把 JSON 中的第 1~8 组映射为学习计划的第 5~12 周(Week 1 组 → 页面第 5 周),每组渲染 Problem / Difficulty / Duration 三列表格;难度文字通过 DifficultyLabel 组件着色(Easy 绿、Medium 橙、Hard 红)。这也解释了为什么 12 周计划文档本身不写死第 5~12 周的题目——它们由数据文件动态生成,改题单只需改 JSON。

Grind 75 工具入口

仓库内还有一个无服务器函数 grind75 catchall(13 行):它把主站 /grind75 路径下的所有请求重写并代理到独立部署的 Grind 75 站点(SOURCE_HOST = 'https://grind75.pages.dev',保留原路径与查询串)。作者说明 Grind 75 是 Blind 75 的"现代版",支持按剩余时间生成计划、按难度和主题过滤、以及自定义题目分组——当你不想照搬本 5 周计划、而要按自己剩余时间(如 1 个月、2 周)裁剪题单时,应以它为准。

与 12 周学习计划的衔接

best-practice-questions.md 在导航上被 sidebars.js 归入 "Beyond the interview" 栏目,且文档头部提示:2022 年 4 月起作者另有一份 12 周学习计划,其课程化内容(含复习 + 练习题)比这份 5 周题单更完整。coding-interview-study-plan.md 的结构与本 5 周题单互补:

  • 第 1~4 周(主题学习):按优先级表格复习各主题(如第 1 周 Array/String/Hash Table/Recursion,第 3 周 Tree/Graph/Heap/Trie),每主题给出建议学时(1~4 小时)并链接到对应算法速查表
  • 第 5~12 周(深度练习):由 QuestionGroups.json 渲染出的 75 题清单(即上文所述的 Week 1~8 组);
  • 该文档还定义了三种备考策略:广度优先(先过一遍所有主题再综合刷题,约 1 个月时间推荐)、深度优先(逐主题"复习 + 大量刷题",时间紧时推荐)、深度优先转广度(先逐主题突破、最后综合刷题,时间充裕者推荐),作者个人推荐带广度成分的策略,以免学后面忘了前面。

因此这份 5 周题单的定位是:时间少于 3 个月、想快速完成算法刷题时的浓缩版路径;若时间充裕,优先采用 12 周计划。

刷题时的通用检查清单

结合仓库中的算法速查表通用技巧,做上述 50 题时可对照以下检查点(原文档建议"像真实面试一样检查后再提交",这里给出具体检查项):

  1. 先验证输入:检查空/负/非法类型输入;或与面试官确认可否假设输入合法以节省时间;
  2. 确认复杂度约束:是否有时间/空间复杂度要求?若算法需反复执行(如服务端场景),考虑预处理输入;
  3. 警惕 off-by-one 错误:区间题(Merge Intervals、Non-overlapping Intervals、Insert Interval 均在本计划中)尤其容易踩坑;
  4. 数据类型一致性:在不做隐式类型转换的语言中,检查拼接的 int/str/list 类型是否一致;
  5. 自测示例:写完代码后用几组手工输入验证,包括边界输入;
  6. 数据结构选型:卡住时枚举常见数据结构逐一尝试是否适用——作者称之为"最后的救命稻草";哈希表是算法题中最常用的结构,且可与双向链表组合(如 LRU Cache 的 get/put 双 O(1));
  7. 权衡空间换时间:提速通常靠"换更合适的结构/算法"或"用更多内存",但注意理论下界(如无序数组求最值不可能快于 O(N))。

进阶资源

原文档末尾推荐了结构化的算法课程,仓库组件 AlgorithmCourses.mdREADME.md 中列出的课程一致:

  • AlgoMonster:由 Google 工程师开发,数据驱动地教授关键题型模式,含数据结构与算法基础速成内容;
  • Grokking the Coding Interview: Patterns for Coding Questions(Design Gurus):从"题目模式"视角扩展本推荐题单,支持 Java/Python/C++/JavaScript 多语言练习与逐步可视化——这与作者"学习并理解模式,而非背答案"的主张一致;
  • Master the Coding Interview: Data Structures + Algorithms(Udemy):约 19 小时内容,除编码外覆盖简历、非技术面、谈薪等,采用 JavaScript 演示;
  • Grind 75 工具(见 grind75 catchall):按剩余时间自动生成/裁剪题单;
  • 各主题速查表study-cheatsheet.md 按主题给出优先级(Array/String/Sorting/Matrix/Tree/Graph 为 High,Linked List/Queue/Stack/Heap/Trie/Interval 为 Mid,DP/Binary/Math/Geometry 为 Low),每份速查表包含概述、语言库、复杂度表、面试注意事项、corner cases 与推荐练习题——做 5 周题单时按周查阅对应主题的速查表,效率最高。

小结

这份 Best Practice Questions 的价值在于把"刷什么、什么顺序刷、什么时候可以跳过"三个问题一次讲清:第 1 周数组/字符串打底,第 2 周滑动窗口与矩阵遍历,第 3 周树与图的 BFS/DFS,第 4 周堆与 Trie 的难度爬坡,第 5 周 DP 按 ROI 取舍(目标 Google 才必做)。计划数据本身以 QuestionGroups.json 的主题/套路标签为元数据底座,经 QuestionList.js 渲染进 12 周计划,并由 Grind 75 工具支持按剩余时间定制——按题名在 LeetCode 检索、配合各周速查表与上文检查清单,即可把这份题单转化为一份真正可执行的备考方案。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.12 K
2.72 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
528
588
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
906
1.83 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
854
1.34 K
docsdocs
暂无描述
Markdown
891
5.79 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.53 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.34 K
1.45 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
988
506
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
540
384