Skip to content

数据结构与算法

前端面试必备算法知识,按专题分类,包含完整代码、示例和边界条件

📚 目录索引

专题文件题目数重点内容
链表01-linked-list.md6 题反转链表、K个一组翻转、环检测
二叉树02-binary-tree.md6 题遍历、重构、最大路径和、LCA
数组/字符串03-array-string.md8 题两数之和、滑动窗口、二分查找
动态规划04-dynamic-programming.md6 题背包问题、LIS、LCS
图算法05-graph.md4 题DFS/BFS、拓扑排序、最短路径
排序算法06-sorting.md6 种快排、归并、堆排序
前端手写07-frontend-handwriting.md8 题Promise、深拷贝、防抖节流

🎯 题目总览(按难度和优先级)

第一梯队 ⭐⭐⭐(必须 100% 掌握)

题目所属专题难度LeetCode
反转链表链表简单206
两数之和数组简单1
最大子序和数组中等53
二叉树遍历二叉树中等94
Promise.all手写中等-
深拷贝手写中等-

第二梯队 ⭐⭐(重点掌握)

题目所属专题难度LeetCode
K个一组翻转链表链表困难25
前序中序重构二叉树二叉树中等105
无重复字符最长子串数组/字符串中等3
零钱兑换动态规划中等322
LRU 缓存手写中等146
防抖节流手写简单-
call/apply/bind手写中等-

第三梯队 ⭐(了解即可)

题目所属专题难度LeetCode
三数之和数组中等15
链表环检测链表中等141
合并K个排序链表链表困难23
最长公共子序列动态规划中等1143
拓扑排序中等207
柯里化手写中等-

📖 学习路径

第一周:基础算法

Day 1-2: 链表专题
  - 反转链表(迭代 + 递归)
  - 合并有序链表
  - 链表中点(快慢指针)

Day 3-4: 二叉树专题
  - 前中后序遍历(递归 + 迭代)
  - 层序遍历(BFS)
  - 最近公共祖先

Day 5-7: 数组/字符串专题
  - 两数之和(哈希表)
  - 最大子序和(Kadane)
  - 无重复字符最长子串(滑动窗口)

第二周:进阶算法

Day 8-9: 动态规划
  - 爬楼梯 / 斐波那契
  - 零钱兑换
  - 最长递增子序列

Day 10-11: 图算法
  - DFS / BFS
  - 拓扑排序

Day 12-14: 排序算法
  - 快速排序(重点)
  - 归并排序
  - 堆排序

第三周:前端手写

Day 15-16: Promise 系列
  - Promise.all / race / allSettled
  - Promise 完整实现

Day 17-18: 工具函数
  - 深拷贝
  - 防抖节流
  - call / apply / bind

Day 19-21: 数据结构
  - LRU 缓存
  - EventEmitter
  - 柯里化

📝 题目格式规范

每道题目按照以下模板编写:

markdown
### 题目名称 ⭐⭐ 【梯队标记】

> **LeetCode**: [链接](url) | **难度**: 中等 | **标签**: 链表, 双指针

#### 题目描述
简洁清晰的问题描述...

#### 核心思路
1. 步骤一
2. 步骤二

#### 代码实现
\`\`\`javascript
function solution(input) {
  // 实现代码
}
\`\`\`

#### 示例调用
\`\`\`javascript
// 基础示例
solution([1, 2, 3]); // 输出: 6

// 边界条件: 空输入
solution([]);        // 输出: 0

// 边界条件: 单元素
solution([5]);       // 输出: 5

// 边界条件: 负数
solution([-1, -2]);  // 输出: -3
\`\`\`

#### 复杂度分析
- **时间**: O(n)
- **空间**: O(1)

🔧 代码示例

文件说明
examples/sorting.js快排、归并排序实现
examples/binary-tree.js二叉树遍历
examples/linked-list.js链表操作
examples/lru-cache.jsLRU 缓存实现

💡 常用技巧速查

数据结构选择

需求数据结构
快速查找哈希表 Map/Set
有序数据数组 + 二分查找
先进先出队列
后进先出
优先级处理堆 / 优先队列
快速插入删除链表

算法模式

问题类型常用技巧
查找配对哈希表
有序数组双指针、二分查找
连续子串滑动窗口
树遍历DFS(递归/栈)、BFS(队列)
最优解动态规划
排列组合回溯
图遍历DFS / BFS
最短路径BFS(无权)/ Dijkstra(带权)

复杂度速记

O(1)       - 哈希表查找、数组索引
O(log n)   - 二分查找、平衡树操作
O(n)       - 线性遍历、哈希表构建
O(n log n) - 高效排序(快排、归并、堆排)
O(n²)      - 双重循环、简单排序
O(2^n)     - 子集问题、递归未优化
O(n!)      - 全排列

🔗 参考资源


提示: 每道题至少手写 3 遍,理解核心思路比记住代码更重要!

前端面试知识库