第一章:面试高频手撕

主线来源

本章以 05_interview/coding/bytedance-202604.md 为核心,保持原文的六大分类及顺序:

  1. 链表
  2. 二叉树与搜索图论
  3. 动态规划
  4. 双指针、滑动窗口与字符串
  5. 栈、队列、哈希、贪心与设计
  6. 二分查找、排序与数组

腾讯、华为、美团及 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 按字节原文同时保留在第五类和第六类。

单题题解标准

每道题根据题目特点提供多种有价值的解法,并呈现从直观思路到面试推荐解法的演进:

  1. 题目与考点
  2. 思路推导
  3. 解法一:直观或基础解法
  4. 解法二:优化解法
  5. 其他值得掌握的解法
  6. 正确性与复杂度分析
  7. 边界用例和常见错误
  8. 面试讲解方式与常见追问

不为了凑数量强行添加没有教学价值的解法。使用哈希表时,要明确它减少了哪些重复查找、付出了多少空间,以及是否真正改善复杂度。

  • Python 代码以 3.8+ 为兼容基线,不使用 list[int]、X | None 等更高版本才支持的运行时类型写法。
  • 每个代码块必须包含自身所需的导入,不依赖同一篇文档中更早出现的代码块。

双指针与哈希表重点

两数之和与三数之和是双指针、哈希表及去重逻辑的重点对照题,必须覆盖两类方法:

  • 两数之和:一次遍历哈希表为面试首选;排序加双指针作为对照,并处理返回原下标的问题。
  • 三数之和:排序加双指针为面试首选;枚举加哈希表作为替代方案,重点比较空间代价与去重难度。

滑动窗口题应特别关注哈希表优化。例如无重复字符的最长子串,需要比较集合逐步收缩与最近位置哈希表直接移动左边界的区别。

题解条目格式

分类文档中的每道正式题解使用以下结构:

## LC 题号 题目名称

### 考频与考点
### 写代码前如何确认题意
### 解法一:基础解法
### 解法二:面试推荐解法
### 解法三:其他高价值解法
### 正确性说明
### 复杂度对比
### 边界用例与常见错误
### 面试追问

没有教学价值的解法可以省略,但必须说明最终推荐哪种写法及原因。