第一章:面试高频手撕
主线来源
本章以 05_interview/coding/bytedance-202604.md 为核心,保持原文的六大分类及顺序:
- 链表
- 二叉树与搜索图论
- 动态规划
- 双指针、滑动窗口与字符串
- 栈、队列、哈希、贪心与设计
- 二分查找、排序与数组
腾讯、华为、美团及 Hot 100 等统计只用于:
- 补充同一道题在其他公司中的出现情况;
- 辅助判断题目的编写优先级;
- 补充字节主线尚未收录的新题。
新增题必须归入上述六类之一,不按照其他公司的分类另起结构。不同来源的原始频次不直接相加。字节原文已有的跨分类题目保持原有安排。
分类文档
| 顺序 | 分类 | 字节条目 | 其他来源新增 | 分类文档 |
|---|---|---|---|---|
| 1 | 链表 | 9 | 7 | 01-linked-list.md |
| 2 | 二叉树与搜索图论 | 11 | 8 | 02-tree-graph.md |
| 3 | 动态规划 | 10 | 10 | 03-dynamic-programming.md |
| 4 | 双指针、滑动窗口与字符串 | 6 | 9 | 04-two-pointers-sliding-window-string.md |
| 5 | 栈、队列、哈希、贪心与设计 | 9 | 21 | 05-stack-queue-hash-greedy-design.md |
| 6 | 二分查找、排序与数组 | 8 | 11 | 06-binary-search-sorting-array.md |
六类共有 119 个分类条目,对应 118 道去重题。LC 215 按字节原文同时保留在第五类和第六类。
单题题解标准
每道题根据题目特点提供多种有价值的解法,并呈现从直观思路到面试推荐解法的演进:
- 题目与考点
- 思路推导
- 解法一:直观或基础解法
- 解法二:优化解法
- 其他值得掌握的解法
- 正确性与复杂度分析
- 边界用例和常见错误
- 面试讲解方式与常见追问
不为了凑数量强行添加没有教学价值的解法。使用哈希表时,要明确它减少了哪些重复查找、付出了多少空间,以及是否真正改善复杂度。
- Python 代码以 3.8+ 为兼容基线,不使用
list[int]、X | None等更高版本才支持的运行时类型写法。 - 每个代码块必须包含自身所需的导入,不依赖同一篇文档中更早出现的代码块。
双指针与哈希表重点
两数之和与三数之和是双指针、哈希表及去重逻辑的重点对照题,必须覆盖两类方法:
- 两数之和:一次遍历哈希表为面试首选;排序加双指针作为对照,并处理返回原下标的问题。
- 三数之和:排序加双指针为面试首选;枚举加哈希表作为替代方案,重点比较空间代价与去重难度。
滑动窗口题应特别关注哈希表优化。例如无重复字符的最长子串,需要比较集合逐步收缩与最近位置哈希表直接移动左边界的区别。
题解条目格式
分类文档中的每道正式题解使用以下结构:
## LC 题号 题目名称
### 考频与考点
### 写代码前如何确认题意
### 解法一:基础解法
### 解法二:面试推荐解法
### 解法三:其他高价值解法
### 正确性说明
### 复杂度对比
### 边界用例与常见错误
### 面试追问
没有教学价值的解法可以省略,但必须说明最终推荐哪种写法及原因。