Skip to content

数据结构和算法 ​

大厂前端面试,先从算法开始。

TIP

  1. 目标不在中大厂的同学,可以略过算法这一节。
  2. 算法 0 基础的同学,可先略过这一节,临时准备根本来不及,需要日常积累。
  3. 如果时间不够,每个分类刷 1-2 道,全刷完太多了。主要是掌握解题的套路。

前端常见的数据结构有哪些?有什么基础算法?有什么应用场景? ​

数组/字符串 ​

基础算法:

  • 排序:冒泡排序,快速排序等
  • 查找:二分查找

链表 ​

应用场景:React fiber 结构

基础算法:遍历,反转

栈 ​

应用场景:

  • 撤销/重做 undo/redo
  • 内存堆栈模型

基础算法:

  • 压栈 push
  • 出栈 pop

队列 ​

应用场景:

  • Event Loop 事件循环
  • 消息队列服务

基础算法:

  • 入队 enqueue
  • 出队 dequeue

树 ​

应用场景:DOM 树,VDOM

基础算法:

  • 深度优先搜索 DFS
  • 广度优先搜索 BFS

二叉树 ​

应用场景:

  • 基础的二叉树应用场景不多,主要用于学习和面试 😄
  • 二叉树扩展出来的,平衡二叉树、AVL 树、红黑树、B+ 树、Trie 树,有大量的应用场景,如数据库管理、文件系统管理、虚拟内存管理等
  • 前端使用的场景较少,了解其基础知识即可

基础算法:

  • 前序遍历
  • 中序遍历
  • 后续遍历

堆 ​

应用场景:内存堆栈模型

基础算法:堆排序

图 ​

应用场景:前端流程图、关系图,社交网络模型,搜索引擎

基础算法:

  • 深度优先搜索 DFS
  • 广度优先搜索 BFS
  • 最短路径,Dijkstra 算法

什么是时间复杂度? ​

算法的时间复杂度,定性(数量级)的描述算法运行的时间,用 O 符号表示。

常见的时间复杂度

  • O(1) 常数级,无循环
  • O(n) 线性,单层循环
  • O(logn) 二分算法
  • O(n*logn) 单层循环,嵌套二分算法
  • O(n^2) 两层循环
  • O(n^3) 三层循环,实际不可用

图示如下

什么是空间复杂度? ​

同时间复杂度,只是把时间换成空间。时间是 CPU 的消耗,空间是内存的消耗。

数组 Array ​

两数之和 ​

买卖股票的最佳时机 ​

盛水最多的容器 ​

除自身以外数组的乘积 ​

字符串 String ​

无重复字符的最长子串 ​

验证回文串 ​

反转字符串中的单词 ​

最长回文子串 ​

链表 Linked List ​

反转链表 ​

合并两个有序链表 ​

删除链表的倒数第 N 个结点 ​

判断环形链表 ​

相交链表 ​

栈 Stack ​

有效的括号 ​

最小栈 ​

用栈实现队列 ​

字符串解码 ​

队列 Queue ​

用队列实现栈 ​

最近的请求次数 ​

二叉树 Binary Tree ​

二叉树的最大深度 ​

验证二叉搜索树 ​

二叉树的层序遍历 ​

对称二叉树 ​

动态规划 Dynamic Programming ​

第 N 个斐波那契数 ​

爬楼梯 ​

不同路径 ​

最长递增子序列 ​

零钱兑换 ​

分治 Divide and Conquer ​

二分查找 ​

快速排序 ​

数组中的第 K 个最大元素 ​

最大子数组和 ​

双指针 Two Pointers ​

移动零 ​

判断子序列 ​

两数之和 II - 输入有序数组 ​

接雨水 ​