id: best-practice-questions title: 最佳实践问题 sidebarlabel: 最佳实践问题 description: 由《Blind 75》作者精心整理的算法编码面试最佳实践问题,涵盖为期5周的学习计划 keywords: [算法, 编码, 面试, 问题, LeetCode, Blind 75] displayedsidebar: docs paginationnext: coding-interview-cheatsheet import AlgorithmCourses from './\courses/AlgorithmCourses.md' import InDocAd from '.
id: best-practice-questions title: 最佳实践问题 sidebar_label: 最佳实践问题 description: 由《Blind 75》作者精心整理的算法编码面试最佳实践问题,涵盖为期5周的学习计划 keywords: [算法, 编码, 面试, 问题, LeetCode, Blind 75] displayed_sidebar: docs pagination_next: coding-interview-cheatsheet
import AlgorithmCourses from './_courses/AlgorithmCourses.md'
import InDocAd from './_components/InDocAd';
:::tip
截至2022年4月,我已制定了一份12周学习计划,其中包括复习课程和练习题。如果你想自定义自己的练习题,我还开发了Grind 75——这是Blind 75的现代化版本,你可以自由定制。
:::
嗨,我是《Blind 75》的作者!
练习是准备编码面试的最佳方式。LeetCode上有超过一千道题目,到底该练哪些呢?于是,几年前,我精选了LeetCode上最重要的75道题LeetCode。许多其他LeetCode题目都是这些精选题目的技巧组合。我在上一份求职中就只做了这些重要题目。
我曾在Blind上分享过这份清单,从我的freeCodeCamp文章中提取了题目,以节省大家的复习时间;后来有人又在LeetCode论坛上转载了这份清单。它不知怎么地火了起来,在编码面试圈里变得超级有名,甚至有人给它起了个名字——Blind 75。Blind 75的LeetCode题目清单可以在这里找到这里。
几年后,我又进一步精简了这份清单,只保留了50道题,并将其分布在5周的学习计划中。以下是针对LeetCode算法题的复习与练习建议安排。如果你还没有账号,赶紧注册一个吧,这对你的面试成功至关重要!
练习时,建议你把它当作真正的编码面试来对待,提交前务必仔细检查。甚至可以手动设计一些测试用例,亲自跑一遍验证正确性!
我已经为以下题目创建了一个LeetCode列表(不包括Premium题目)。你可以随时用它来追踪自己的练习进度。
:::tip 专家提示
如果你时间紧迫,AlgoMonster致力于帮助你在最短时间内轻松通过技术面试。由谷歌工程师打造,AlgoMonster采用数据驱动的方法,教你最实用的关键题型模式,并提供内容帮助你快速复习基础数据结构和算法。学会并理解模式,而不是死记硬背答案!
:::
第一周,我们将从数组和字符串的简单题与中等难度题混合练习开始热身。数组和字符串是面试中最常见的题型;熟悉它们有助于打下扎实的基础,从而更好地应对更难的题目。
| 题目 | 难度 | LeetCode |
|---|---|---|
| 两数之和 | 简单 | 链接 |
| 包含重复元素 | 简单 | 链接 |
| 股票买卖的最佳时机 | 简单 | 链接 |
| 有效变位词 | 简单 | 链接 |
| 有效括号 | 简单 | 链接 |
| 最大子数组 | 简单 | 链接 |
| 数组中除自身以外的乘积 | 中等 | 链接 |
| 三数之和 | 中等 | 链接 |
| 合并区间 | 中等 | 链接 |
| 分组异位词 | 中等 | 链接 |
| 题目 | 难度 | LeetCode |
|---|---|---|
| 最大乘积子数组 | 中等 | 链接 |
| 在旋转排序数组中查找 | 中等 | 链接 |
第二周的重点是链表、字符串以及基于矩阵的题目。目标是掌握处理链表的常用方法,遍历矩阵的技巧,以及序列分析(数组/字符串)的技巧,比如滑动窗口、链表遍历和矩阵遍历。
| 题目 | 难度 | LeetCode |
|---|---|---|
| 反转链表 | 简单 | 链接 |
| 检测链表中的环 | 简单 | 链接 |
| 盛水容器 | 中等 | 链接 |
| 在旋转排序数组中查找最小值 | 中等 | 链接 |
| 最长重复字符替换 | 中等 | 链接 |
| 无重复字符的最长子串 | 中等 | 链接 |
| 岛屿数量 | 中等 | 链接 |
| 删除链表倒数第N个节点 | 中等 | 链接 |
| 回文子串 | 中等 | 链接 |
| 太平洋大西洋水流 | 中等 | 链接 |
| 最小窗口子串 | 难 | 链接 |
第3周的重点是树、图和堆等非线性数据结构。你应该熟悉各种树遍历(中序、前序、后序)算法以及广度优先搜索和深度优先搜索等图遍历算法。根据我的经验,使用更高级的图算法(如迪杰斯特拉和弗洛伊德-沃歇尔)的情况相当少见,通常也不必要。
| 题目 | 难度 | LeetCode |
|---|---|---|
| 翻转二叉树 | 简单 | 链接 |
| 验证二叉搜索树 | 中等 | 链接 |
| 不重叠区间 | 中等 | 链接 |
| 根据先序和中序遍历构造二叉树 | 中等 | 链接 |
| 前K个频繁元素 | 中等 | 链接 |
| 克隆图 | 中等 | 链接 |
| 课程安排 | 中等 | 链接 |
| 序列化与反序列化二叉树 | 难 | 链接 |
| 二叉树最大路径和 | 难 | 链接 |
| 题目 | 难度 | LeetCode |
|---|---|---|
| 二叉树的最大深度 | 简单 | 链接 |
| 相同的树 | 简单 | 链接 |
| 二叉树层序遍历 | 中等 | 链接 |
| 编码与解码字符串 | 中等 | 链接(高级) |
第4周在之前几周知识的基础上进一步深化,但题目难度有所提升。面试时很可能会遇到这种难度的题目。你可以更多地练习更高级的数据结构,比如(但不限于)堆和字典树,这些虽然不常见,但仍会被问到。
| 题目 | 难度 | LeetCode |
|---|---|---|
| 另一棵树的子树 | 简单 | 链接 |
| 二叉搜索树的最低公共祖先 | 简单 | 链接 |
| 实现字典树(前缀树) | 中等 | 链接 |
| 添加与搜索单词 | 中等 | 链接 |
| 二叉搜索树中的第K小元素 | 中等 | 链接 |
| 合并K个有序链表 | 难 | 链接 |
| 从数据流中查找中位数 | 难 | 链接 |
| 插入区间 | 中等 | 链接 |
| 最长连续序列 | 中等 | 链接 |
| 单词搜索II | 难 | 链接 |
| 题目 | 难度 | LeetCode |
|---|---|---|
| 会议室 | 简单 | 链接(高级) |
| 会议室II | 中等 | 链接(高级) |
| 图的有效树 | 中等 | 链接(高级) |
| 无向图中连通分量的数量 | 中等 | 链接(高级) |
| 外星人词典 | 困难 | 链接(高级) |
第5周的重点是动态规划(DP)相关题目。作为面试官,我个人并不太喜欢动态规划题,因为它们在实际场景中并不真正适用。坦白说,如果我在面试时被要求解答那些难度极高的动态规划题,我可能根本拿不到这份工作。不过,像谷歌这样的公司依然会问动态规划题。如果你的梦想是加入谷歌,那么动态规划就是无法回避的。
动态规划题很难掌握,而提高这方面能力的最佳方法……你猜对了——就是多做题!务必熟悉记忆化和回溯这两种概念。
从实际角度来看,花时间学习并练习动态规划题的投资回报率非常低。因此,动态规划题的重要性相对较低,属于可选内容。只有当你有充裕的时间,并且特别想做到万无一失、确保自己完全掌握所有知识点时,才应该去钻研这些题目(尤其是准备应聘谷歌时)。
| 题目 | 难度 | LeetCode |
|---|---|---|
| 爬楼梯 | 简单 | 链接 |
| 零钱兑换 | 中等 | 链接 |
| 最长递增子序列 | 中等 | 链接 |
| 组合总和 | 中等 | 链接 |
| 打家劫舍 | 中等 | 链接 |
| 打家劫舍 II | 中等 | 链接 |
| 解码方式 | 中等 | 链接 |
| 唯一路径 | 中等 | 链接 |
| 跳跃游戏 | 中等 | 链接 |
| 单词拆分 | 中等 | 链接 |
如果你想进行更系统化的算法练习,我推荐以下几门课程:
免责声明:
本文档采用基于机器的 AI 翻译服务进行翻译。尽管我们力求准确,但请注意,自动翻译可能存在错误或不准确之处。应以原文语言版本的文档作为权威依据。如需获取关键信息,建议使用专业的人工翻译。对于因使用本翻译而产生的任何误解或误读,我们概不负责。