尚硅谷大模型技术之高频面试题
版本:V2.1.9
核心技术 / 数据结构与算法

数据结构与算法

9 个问题

常用数据结构#

Q线性数据结构(元素之间一对一线性关系)#

栈(Stack)#

核心规则:先进后出(LIFO),只有一端(栈顶)能进行增删操作,栈底封闭。

队列(Queue)#

核心规则:先进先出(FIFO),一端(队尾)入队,一端(队首)出队)

链表(Link List)#

核心结构:由一个个「节点」组成,每个节点包含「数据」和「下一个节点的引用」(类似链条),分单链表、双链表、循环链表。

优点:插入 / 删除中间元素效率高(只需修改节点引用,无需移动其他元素),内存分配灵活(无需连续内存)。

缺点:随机访问效率低(无索引,需从头节点遍历到目标节点),占用额外内存存储节点引用。

Q非线性数据结构(元素之间一对多/多对多关系)#

树(Tree)#

核心结构:分层树形结构,有且只有一个「根节点」,每个节点可以有多个子节点,无环(节点之间不会形成闭环)。

高频之类及其特点:

二叉树:每个节点最多有 2 个子节点(左、右子节点),是最基础的树结构,支持前 / 中 / 后 / 层序四种遍历。#
二叉搜索树(BST):二叉树的升级版,左子树所有节点值 <根节点值,右子树所有节点值> 根节点值,支持高效查找 / 插入 / 删除(平均 O (logn))。#
红黑树/AVL树:平衡二叉搜索树,避免二叉搜索树退化为链表,保证查找 / 插入 / 删除的高效性(底层用于字典、集合等)。#
图(Graph)#

核心结构: 由节点和边组成,允许有环,是最通用的复杂数据结构。

分类:按照边的方向可以划分为有向图和无向图,按照边的权重可以分为带权图和无权图。#
存储方式:邻接表(节省内存适合稀疏图),邻接矩阵(查找高效,适合稠密图)#

算法#

Q时间复杂度和空间复杂度的定义是什么?#

时间复杂度:描述算法执行的基本指令数随输入规模 n 的增长趋势,用大 O 表示(如 O (n)、O (logn)),通常关注最坏情况。

空间复杂度:描述算法内存空间随输入规模 n 的增长趋势,同样用大 O 表示,关注数据占用的空间。

Q常见时间复杂度的排序是什么?#

O(1) < O(logn) < O(n) < O(nlogn) < O(n²) < O(n·2ⁿ) < O(n·n!) < O(nⁿ)。

Q二分查找的适用条件及时间复杂度?#

  • 适用条件:有序数组(升序或降序)。
  • 原理:每轮将搜索范围缩小一半,直至找到目标或范围为空。
  • 时间复杂度:O (logn),空间复杂度 O (1)。

Q快速排序和归并排序的核心思想及复杂度对比?#

Q动态规划和分治算法的区别?#

分治算法:将问题拆分为独立子问题,递归求解后合并结果(如归并排序)。

动态规划:处理子问题重叠的场景,通过存储子问题结果避免重复计算(如爬楼梯、0-1 背包)。

Q贪心算法的适用条件及案例?#

适用条件:问题需满足贪心选择性质(局部最优可导出全局最优)和最优子结构。

案例:分发糖果(每个孩子至少 1 颗,评分高的孩子需比相邻孩子多),通过左右两次遍历确保局部最优。

Q回溯算法的基本步骤及案例?#

步骤:选择候选解→递归探索→验证条件→回溯(撤销选择)。

案例:N 皇后问题,通过递归尝试放置皇后,验证列和对角线无冲突,冲突则回溯。

常考力扣经典题#

链接:

20. 有效的括号 - 力扣(LeetCode)

70. 爬楼梯 - 力扣(LeetCode)

198. 打家劫舍 - 力扣(LeetCode)

53. 最大子数组和 - 力扣(LeetCode)

72. 编辑距离 - 力扣(LeetCode)

11. 盛最多水的容器 - 力扣(LeetCode)

134. 加油站 - 力扣(LeetCode)

4. 寻找两个正序数组的中位数 - 力扣(LeetCode)

15. 三数之和 - 力扣(LeetCode)

42. 接雨水 - 力扣(LeetCode)

105. 从前序与中序遍历序列构造二叉树 - 力扣(LeetCode)

110. 平衡二叉树 - 力扣(LeetCode)