我是一段不羁的公告!
记得给艿艿这 3 个项目加油,添加一个 STAR 噢。
https://github.com/YunaiV/SpringBoot-Labs
https://github.com/YunaiV/onemall
https://github.com/YunaiV/ruoyi-vue-pro

精尽数据结构与算法面试题「最新更新时间:2024-02」

本文,我们将“数据结构与算法”,直接简称“算法”,更加简洁。实际上,数据结构、算法,是两个相关性很高的不同的知识点。

当胖友准备开始准备算法相关的面试,就要做好心理准备,这可能是比想象中痛苦的过程,并且时间还不短,少则三个月,半年也是比较正常的时间。

不过艿艿觉得,随着现在互联网越来越朝着精英化发展,对学历对履历的要求越来越高,大公司甚至部分小公司,也愈发注重基础技术。而基础技术,无非考核两点,编程语言和算法。所以,这个过程,可能真的是我们必须去体验的。

不过换过来思考,算法不会像我们学习的框架或者中间件,有过时一说。也就说,学习一次,终身受众。并且,相比大多数 CRUD 的无脑,撩撩算法,也是一种“放松”,哈哈哈哈。

如何学习?

可能很多同学,一说到算法面试的准备,就想到的是去 LeetCode 去刷题?!但是,这个真的正确么?一半一半。相信绝大多数胖友,在大学里是没有认真学习算法,又或者在工作中,因为应用较少,所以基本忘记的也差不多了。

那么,就必须重新学习下算法!请不要上来就去 LeetCode 去刷题,简直是花样作死。算法准备,是一场持久战,需要系统的去准备。那么,怎么进行学习呢?

讲真,市面上大多数算法,无论是书籍,还是视频,真的真的真的是看不下去啊看不下去。有握爪的胖友么?最近,刷了王争的 《数据结构与算法之美》 ,哈哈哈,还很认真的做了笔记。如下图:

笔记

艿艿,利益无关,主要是自己看了,真的觉得不错,足够适合我们准备算法面试。如果想要挑战,请去看 《数据结构与算法分析:Java语言描述》 等等。呵,等着胖友回来说,“奶奶,我错了~~~😿” 哈哈哈哈。

但是,还是要打个预防针,即使艿艿推荐了 《数据结构与算法之美》 这个教程,也并不意味着它很简单。它还是非常难的,特别是红黑树!简直是魔鬼啊!!!仅仅是说,它足够能够让艿艿看完,并且蛮多时候在地铁上就能耐心看完。嘻嘻,不过呢,我有 2 年 ACM 集训的经验,可能底子又比大多数同学好点。对于 《数据结构与算法分析:Java语言描述》 来说,在地铁上,真的是分分钟趟睡,又或是拿出手机,刷刷刷。

胖友,要拿出勇气!如果碰到困难的,就退缩,就不要准备算法面试,不要想着去大公司。想啥呢!对吧。

如何练习?

三分学,七分练。用在算法面试的准备中,非常适合。哈哈哈,在算法面试的准备中,真正占用时间的是,不是算法的学习,而是在算法的练习中。这个过程,比学习算法会更加痛苦和难受。但是,也只有经历了练习的过程,学习算法,才可能真正变成学会算法。

就好比说,我们学习了数学的某个知识点,直接去考试,绝大数情况下,可能是直接懵逼。同理,切换到真正去公司面试时,考到具体的算法题目,肯定也是类似的情况。所以,一定要勤加练习,死磕练习,玩命练习。

那么,如何练习算法呢?答案很简单,去刷 LeetCode 。比较幸运的是,目前 LeetCode 有国内的版本,可以访问 https://leetcode-cn.com/ 进行愉快的玩耍,照顾我们这些英语不好的孩子。LeetCode 本土化的名字,真的是堪比麦丹劳的“金拱门”,竟然见“力扣”,哈哈哈哈。

不过,怎么刷 LeetCode 呢?毕竟 LeetCode 已经进入千题时代,想要全部做完,肯定是不太现实,即使时间允许,我们的实力也不允许,哈哈哈哈。推荐看看 《花花酱 LeetCode进入千题时代后该如何刷题?》 。可以开倍速播放,比较核心的,就是下面这张图:

如何刷题

即使如此,可能对于基础相对薄弱的,或者之前没啥刷题经验的胖友,直接上来就刷 LeetCode 题目,特别是一些困难级别的题目,可能简直是进了地狱模式的游戏难度,挫败感 120 分的强烈。那么怎么办呢?马化腾爸爸,很早就告诉了我们残酷的真理,“不充钱,怎么变强!”。所以,我们可能需要看一些针对 LeetCode 出的刷题面试视频课程:

艿艿的话,自己刷的是,覃超 《算法面试通关 40 讲》 。并且,还是老样子,认真做了笔记,如下图:

笔记

题外话,因为艿艿自己不准备面试,所以一般是不会去看算法。但是考虑到,这篇文章,蛮多人催的,所以自己又看了蛮多的资料的。就冲这份良心,我都给自己打 120 分。

另外,市面上也有一些讲面试算法的书,这里也补充整理下,直接放下面:

考虑到大多数胖友,都是在职为主的,可以直接考虑 《算法面试通关 40 讲》 。主要原因,还是因为我目前暂时只看完了这套教程。后续,我也抽时间看看,左神和小象学院的视频,良心如我。

哪些题目?

正如我们在 《花花酱 LeetCode进入千题时代后该如何刷题?》 看到的视频,我们需要每个类型的 10-20 题,所以我们需要知道,算法面试,主要有哪些题型,每个题型刷哪些题目

题型来说,我们可以按照数据结构与算法分别分类:

整理题型和题库时,按照自己的想法,并且参考下面的资料:

  • 数据结构

    • 数组

      矩阵,本质是二维数组。有些文章会喜欢归类成“数组与矩阵”,是一个意思。

    • 链表

    • 栈和队列
    • 字符串
    • 哈希表(散列表)
  • 算法
    • 双指针
    • 排序
    • 二分查找
    • 深度优先搜索
    • 广度优先搜索
    • 拓扑排序
    • 并查集
    • 分治算法
    • 回溯算法
    • 贪心算法
    • 动态规划
    • 位运算
    • 数学

下面,按照这个分类,逐个来看看,需要做哪些题目。

友情提示:题目的顺序,主要按照王争老师的 《数据结构与算法之美》 为主。主要考虑点,是艿艿是按照这个顺序复习的,哈哈哈哈。

注意:每个下面的每个解答后面,每个 Solution 类,都对应一个解决方式。另外,一些题目,可能存在多解。建议的话,都去理解掉,因为面试官可能刨根问底。

😈 嘿嘿,发现自己撸了快 300 题 leetcode 左右,所以体量还是比较大的。艿艿尽量参考 LeetCode 提供的「🔥热题 HOT 100 」、「精选 TOP 面试题」,进行下标记。

刷题很累,多多坚持!

数组

【双指针】,一般用于数组的解题中。所以它的题目,我们也会放在【数组】这个题型中,也就是当前小节。通过双指针,可以将一些时间复杂度为 O(N^2) 的解法,进行优化成 O(N) 。

因为把【数组】和【双指针】放在了一起,所以题目可能蛮多的。保持淡定,相比动态规划等题目,这两类算比较简单的。

001. 两数之和

👉 相似题目:167. 两数之和 II - 输入有序数组

👉 相似题目:015. 三数之和

👉 相似题目:016. 最接近的三数之和

👉 相似题目:018. 四数之和

👉 相似题目:454. 四数相加 II

👉 相似题目:633. 平方数之和

011. 盛最多水的容器

👉 相似题目:042. 接雨水

283. 移动零

👉 相似题目:027. 移除元素

👉 相似题目:026. 删除排序数组中的重复项

👉 相似题目:080. 删除排序数组中的重复项 II

485. 最大连续 1 的个数

645. 错误的集合

👉 相似题目:448. 找到所有数组中消失的数字

👉 相似题目:442. 找到所有数组中消失的数字

667. 优美的排列 II

697. 数组的度

565. 嵌套数组

769. 最多能完成排序的块

👉 相似题目:768. 最多能完成排序的块 II

977. 有序数组的平方

118. 杨辉三角

👉 相似题目:119. 杨辉三角 II

189. 旋转数组

238. 除自身以外数组的乘积

矩阵

766. 托普利茨矩阵

566. 重塑矩阵

074. 搜索二维矩阵

240. 搜索二维矩阵 II

054. 螺旋矩阵

073. 矩阵置零

字符串

028. 实现 strStr()

242. 有效的字母异位词

👉 相似题目:049. 字母异位词分组

205. 字符串同构

125. 验证回文串

👉 相似题目:680. 验证回文字符串 Ⅱ

👉 相似题目:409. 最长回文串

👉 相似题目:009. 判断一个整数是否是回文数

344. 反转字符串

👉 相似题目:345. 反转字符串中的元音字母

艿艿:这道题目,刚一看,一脸懵逼。可以简单理解成,需要将元音字母之间,做兑换。例如说,第一个元音字符和倒数一个元音字符对换,第二个原因字符和倒数第二个元音字符对换。而元音字母是 aeiouAEIOU

524. 通过删除字母匹配到字典里最长单词

003. 无重复字符的最长子串

👉 相似题目:159. 至多包含两个不同字符的最长子串

👉 相似题目:340. 至多包含两个不同字符的最长子串

696. 计数二进制子串

151. 翻转字符串里的单词

👉 相似题目:557. 反转字符串中的单词 III

008. 字符串转换整数 (atoi)

链表

每次写链表,都蛮头疼的。如果在搭配上递归的方式,简直就是一脸懵逼。

往往链表的答案不复杂,就是懵逼啊懵逼。

707. 设计链表

002. 两数相加

👉 相似题目:445. 两数相加 II

024. 两两交换链表中的节点

👉 相似题目:234. 回文链表

👉 相似题目:206. 反转链表

👉 相似题目:092. 反转链表 II

👉 相似题目:025. K 个一组翻转链表

👉 相似题目 061. 旋转链表

083. 删除排序链表中的重复元素

👉 相似题目:082. 删除排序链表中的重复元素 II

160. 相交链表

👉 相似题目:141. 环形链表

👉 相似题目:142. 环形链表 II

148. 排序链表

👉 相似题目:147. 对链表进行插入排序

021. 合并两个有序链表

👉 相似题目:023. 合并K个排序链表

725. 分隔链表

👉 相似题目:328. 奇偶链表

725. 分隔链表

086. 分隔链表

二分查找

艿艿:其实我们已经在前面做了一堆二分查找的题目,嘿嘿。

当然,本小节,我们会看到很多略微变种的二分查找。

287. 寻找重复数

  • 题目:https://leetcode-cn.com/problems/find-the-duplicate-number/
  • 难度:中等
  • 解答:no0287
  • 备注:有三种解答,不同时间复杂度,胖友要注意看。
    • 最佳解是,经典的弗洛伊德的乌龟和兔子(循环检测)。🙂 可能看弗洛伊德的乌龟和兔子,整个推导的过程比较懵逼,耐心。

035. 搜索插入位置

👉 相似题目:744. 寻找比目标字母大的最小字母

👉 相似题目:034. 在排序数组中查找元素的第一个和最后一个位置

👉 相似题目:704. 二分查找

👉 相似题目:981. 基于时间的键值存储

👉 相似题目:278. 第一个错误的版本

153. 寻找旋转排序数组中的最小值

👉 相似题目:154. 搜索旋转排序数组

👉 相似题目:033. 搜索旋转排序数组

👉 相似题目:081. 搜索旋转排序数组 II

852. 山脉数组的峰顶索引

👉 相似题目:162. 寻找峰值

069. x 的平方根

👉 相似题目:367. 有效的完全平方数

👉 相似题目:540. 有序数组中的单一元素

栈和队列

这个小节里,我们把「滑动窗口」,也归类在这里。未来,可能会拆分出去。

232. 用队列实现栈

👉 相似题目:225. 用队列实现栈

155. 最小栈

👉 相似题目:716. 最大栈

020. 有效的括号

👉 相似题目:1003. 检查替换后的词是否有效

496. 下一个更大元素 I

👉 相似题目:503. 下一个更大元素 II

👉 相似题目:739. 每日温度

👉 相似题目:239. 滑动窗口最大值

👉 相似题目:076. 最小覆盖子串

👉 相似题目:438. 找到字符串中所有字母异位词

递归

856. 括号的分数

394. 字符串解码

👉 相似题目:726. 原子的数量

排序

215. 数组中的第 K 个最大元素

347. 前 K 个高频元素

👉 相似题目:451. 根据字符出现频率排序

075. 颜色分类

哈希表

217. 存在重复元素

👉 相似题目:219. 存在重复元素 II

👉 相似题目:220. 存在重复元素 III

594. 最长和谐子序列

128. 最长连续序列

387. 字符串中的第一个唯一字符

本小节,题目蛮多的,淡定。

另外,会包括一些二叉搜索树的题目,主要考虑相似题。

104. 二叉树的最大深度

👉 相似题目:111. 二叉树的最小深度

👉 相似题目:110. 平衡二叉树

👉 相似题目:543. 两节点的最长路径

112. 路径总和

👉 相似题目:113. 路径总和 II

👉 相似题目:437. 路径总和 III

👉 相似题目:666. 路径总和 IIII

👉 相似题目:687. 最长同值路径

👉 相似题目:二叉树的所有路径

👉 相似题目:129. 求根到叶子节点数字之和

👉 相似题目:124. 二叉树中的最大路径和

👉 相似题目:508. 出现次数最多的子树元素和

226. 翻转二叉树

617. 合并二叉树

572. 另一个树的子树

👉 相似题目:100. 相同的树

👉 相似题目:965. 单值二叉树

👉 相似题目:872. 叶子相似的树

👉 相似题目:101. 对称二叉树

337. 打家劫舍 III

671. 二叉树中第二小的节点

👉 相似题目:230. 二叉搜索树中第K小的元素

637. 二叉树的层平均值

👉 相似题目:102. 二叉树的层次遍历

👉 相似题目:107. 二叉树的层次遍历 II

517. 找树左下角的值

144. 二叉树的前序遍历

👉 相似题目:094. 二叉树的中序遍历

👉 相似题目:145. 二叉树的后序遍历

👉 相似题目:589. N 叉树的前序遍历

👉 相似题目:429. N 叉树的层序遍历

👉 相似题目:590. N 叉树的后序遍历

👉 相似题目:987. 二叉树的垂序遍历

297. 二叉树的序列化与反序列化

👉 相似题目:449. 序列化和反序列化二叉搜索树

236. 二叉树的最近公共祖先

👉 相似题目:235. 二叉搜索树的最近公共祖先

814. 二叉树剪枝

二叉搜索树

501. 二叉搜索树中的众数

👉 相似题目:098. 验证二叉搜索树

👉 相似题目:530. 二叉搜索树的最小绝对差

👉 相似题目:538. 把二叉搜索树转换为累加树

👉 相似题目:653. 两数之和 IV - 输入 BST

108. 将有序数组转换为二叉搜索树

👉 相似题目:109. 有序链表转换二叉搜索树

700. 二叉搜索树中的搜索

👉 相似题目:701. 二叉搜索树中的插入操作

👉 相似题目:450. 删除二叉搜索树中的节点

👉 相似题目:776. 拆分二叉搜索树

👉 相似题目:669. 修剪二叉搜索树

099. 恢复二叉搜索树

字典树

208. 实现 Trie (前缀树)

👉 相似题目:键值映射

BFS && DFS

考虑到很多题目,既可以用广度优先搜索,也可以使用深度优先搜索。所以,放在一个小节。

785. 判断二分图

133. 克隆图

👉 相似题目:138. 复制带随机指针的链表

733. 图像渲染

👉 相似题目:827. 最大人工岛

279. 完全平方数

127. 单词接龙

👉 相似题目:126. 单词接龙 II

👉 相似题目:433. 最小基因变化

👉 相似题目:752. 打开转盘锁

695. 岛屿的最大面积

👉 相似题目:200. 岛屿数量

👉 相似题目:130. 被围绕的区域

547. 朋友圈

417. 太平洋大西洋水流问题

841. 钥匙和房间

542. 01 矩阵

👉 相似题目:934. 最短的桥

👉 相似题目:675. 为高尔夫比赛砍树

并查集

实际上,并查集的题目,是可以使用 BFS 和 DFS 进行实现的,所以本小节题目不会放很多。很多题目,我们在 「BFS && DFS」 小节,顺手去写了下。

684. 冗余连接

拓扑排序

207. 课程表

👉 相似题目:210. 课程表 II

802. 找到最终的安全状态

回溯算法

我们会发现,很多回溯算法,是使用 DFS 进行实现。回溯算法是一种思想,常常使用 DFS 算法的方式,进行实现。

017. 电话号码的字母组合

👉 相似题目:022. 括号生成

👉 相似题目:301. 删除无效的括号

093. 复原IP地址

079. 单词搜索

👉 相似题目:212. 单词搜索 II

046. 全排列

👉 相似题目:047. 全排列 II

👉 相似题目:996. 正方形数组的数目

👉 相似题目:077. 组合

👉 相似题目:784. 字母大小写全排列

👉 相似题目:039. 组合总和

👉 相似题目:040. 组合总和 II

👉 相似题目:216. 组合总和 III

👉 相似题目:282. 给表达式添加运算符

078. 子集

👉 相似题目:090. 子集 II

131. 分割回文串

842. 将数组拆分成斐波那契序列

037. 解数独

👉 相似题目:051. N皇后

👉 相似题目:052. N皇后

分治算法

241. 为运算表达式设计优先级

096. 不同的二叉搜索树

👉 相似题目:095. 不同的二叉搜索树 II

关于下面的众数的题目,只有 169 是通过分治算法解决,并且还不是最优解。最优是 “Boyer-Moore 投票算法”

169. 求众数

👉 相似题目:229. 求众数 II

贪心算法

455. 分发饼干

435. 无重叠区间

👉 相似题目:452. 用最少数量的箭引爆气球

406. 根据身高重建队列

121. 买卖股票的最佳时机

👉 相似题目:122. 买卖股票的最佳时机 II

392. 判断子序列

055. 跳跃游戏

763. 划分字母区间

055. 跳跃游戏

👉 相似题目:045. 跳跃游戏 II

动态规划 DOING

TODO 需要整理下

动态规划题型

  • 0-1 背包
  • 斐波那契数列

509. 斐波那契数

👉 相似题目:070. 爬楼梯

👉 相似题目:746. 使用最小花费爬楼梯

198. 打家劫舍

👉 相似题目:213. 打家劫舍 II

064. 最小路径和

👉 相似题目:062. 不同路径

👉 相似题目:063. 不同路径 II

303. 区域和检索 - 数组不可变

413. 等差数列划分

343. 整数拆分

091. 解码方法

416. 分割等和子集

494. 目标和

474. 一和零

322. 零钱兑换

👉 相似题目:518. 零钱兑换 II

👉 相似题目:377. 组合总和 Ⅳ

139. 单词拆分

309. 最佳买卖股票时机含冷冻期

👉 相似题目:714. 买卖股票的最佳时机含手续费

👉 相似题目:123. 买卖股票的最佳时机 III

👉 相似题目:188. 买卖股票的最佳时机 IV

221. 最大正方形

👉 相似题目:085. 最大矩形

👉 相似题目:84. 柱状图中最大的矩形

152. 乘积最大子序列

位运算

位操作很骚,有些想不到,真的就是想不到。

461. 汉明距离

136. 只出现一次的数字

👉 相似题目:268. 缺失数字

👉 相似题目:260. 只出现一次的数字 III

190. 颠倒二进制位

231. 2 的幂

👉 相似题目:342. 4 的幂

693. 交替位二进制数

476. 数字的补数

371. 两整数之和

318. 最大单词长度乘积

191. 位1的个数

👉 相似题目:338. 比特位计数

数学 TODO

TODO

###

  • 题目:<>
  • 难度:
  • 解答:no0

👉 相似题目

总访客数 && 总访问量