文章目录
- 前言
- JehanRio's 后端高频面试题合集
- 第一轮刷题
- 第二轮刷题
- 第三轮刷题
前言
先贴一张图,目前我刷题的记录大概是350多题,加上牛客刷的,差不多有400道题了吧,可能比这个数量少一些。我从22年1月开始陆陆续续刷题,那个时候为了刷蓝桥杯,刷了很多题,很荣幸,在刚开始接触算法一两个月,就拿到了一等奖。但是后面因为期末各种原因,没能继续走下去。直到今年3月开始,才又恢复了刷题的习惯。但这刷过的题中,很多都是很久以前刷的,有些题甚至二刷时还是一点思路没有,属于是刷了忘,忘了刷。在这之前我一直是分专题刷的,现如今也到了该收网总结,模考的时候了。就像是高中高一高二打基础,高三总复习一样。
说点不好的消息,我可能得走秋招了。这一切感觉有点触不及防,我突然发现我并没有做好准备去冲击互联网大厂,这让我感到非常难过。要是当年我找刘学长的时候,就已经下定决心走校招,找实习,投大厂,而不是左右模棱两可,兴许现在也不会那么焦虑了吧。由于本人技术栈也是C++的,在投递的时候,也发现了能投递的岗位少之又少。
要是能重回大一,我兴许不会走现在这一条路。我这三年来受尽了不喜欢的事情,去卷绩点,参加那些我根本不喜欢的比赛,上那些毫无意义的课程,all of this,走了太多的弯路。现在回想起来,似乎老天爷给了我3次重生的机会,但我都没有把握住,第一次是不加入卓越班,转专业去计算机;第二次是好好待在红岩,但当时刚开始就让我学go,一周开发三国杀太劝退了;第三次是大二上听了刘学长的话,准备工作的东西,一条路走到底。我似乎都选择了最坏的方法。刚才还在跟我大一的室友聊天,我们谈到当时大一我们那个小小的寝室,还是有很多事情值得回味的。当时大家一起笑小蒋因没有追到心仪的女生而害臊,也谈论王总现在不知去向如何,还谈论我当时大一是多么意气风发。是啊,大学生最大的敌人是信息差,如果能重来一次,能够遇到一位贵人,给我讲述了很多经验,让我少走那么多弯路,该多好啊,或许我现在的人生都将发生巨大的改变。但建议有什么用呢,人生在世,是不需要太多建议的,很多东西只有亲身经历过才会明白。有时候不是努力没用,而是要朝着正确的方向努力。
今天是9月1日,我在昨天算是正式开启了我的校招之旅。我有个朋友,我看他力扣刷了700多题,才开始进行总复习。而我才350多题,比起来真是相形见绌。但我感觉我现在也没有时间继续刷更多的题了,这350多题好好总结起来,兴许也能奏效。所以这篇文章,我就重点记录下我的后端高端题合集。然后呢,这个部分,我也不会再分专题了,毕竟真正面试时,也不会告诉你,这个题要用什么方法,所以自己需要对什么题用什么方法敏感一点。
目前的想法是,每天刷个五六题,然后就去背面经,再看牛客别人的贴子,如果看到了别人的手撕题,再加上额外的刷题,yeah,大概就这样,留给你的时间不多了,开冲。
JehanRio’s 后端高频面试题合集
第一轮刷题
以下打⭐的题是博主在第二次刷题时候仍然未做起的题目,大部分也是很重点的题目,需要多做几遍,尤其是几个LCS、LIS这些动态规划,还有单调栈、前缀和等等。希望打了⭐的题,数量就控制在一颗上吧。
Leetcode 146. LRU 缓存(手撕双向链表)
Leetcode 206. 反转链表(递归+非递归版本)
Leetcode 912. 排序数组(快排+堆排序+归并排序)
Leetcode 21. 合并两个有序链表(指针移动)
Leetcode 8. 字符串转换整数 (atoi 细节问题)
Leetcode 234. 回文链表(快慢指针+原地反转 栈)
Leetcode 704. 二分查找(常规二分查找 注意边界以及等号问题)
Leetcode 470. 用 Rand7() 实现 Rand10()(公式(x-1)*y+y)
Leetcode 53. 最大子数组和(动态规划 可能考察子数组问题)⭐
Leetcode 3. 无重复字符的最长子串(滑动窗口)
Leetcode 4. 寻找两个正序数组的中位数(找第K大的数)
Leetcode 141. 环形链表(典 快慢指针)
Leetcode 153. 寻找旋转排序数组中的最小值(二分算法)⭐
Leetcode 33. 搜索旋转排序数组(二分 多做)⭐
Leetcode 215. 数组中的第K个最大元素(手撕大根堆、快排)
Leetcode 25. K 个一组翻转链表(递归+翻转链表)
Leetcode 5. 最长回文子串(动态规划 从右往左扩展)
Leetcode 151. 反转字符串中的单词(细节 原地反转 边缘问题)
Leetcode 102. 二叉树的层序遍历(队列 BFS)
Leetcode 415. 字符串相加(模拟 注意细节)
Leetcode 15. 三数之和(双指针 迭代)
剑指 Offer 54. 二叉搜索树的第k大节点(逆中序遍历)
Leetcode 678. 有效的括号字符串(用栈分别(和*存放下标)⭐⭐
Leetcode 20. 有效的括号(栈的简单应用)
Leetcode 213. 打家劫舍 II(dp 注意两种情况)⭐
Leetcode 239. 滑动窗口最大值(优先队列 滑动窗口)
Leetcode 322. 零钱兑换(动态规划 背包问题)
Leetcode 2. 两数相加(链表相加+Carry位)
Leetcode 160. 相交链表(两遍遍历)
Leetcode 138. 复制带随机指针的链表(用哈希表先存储创建的节点)⭐
Leetcode142. 环形链表 II(快慢指针)
Leetcode 104. 二叉树的最大深度(递归)
Leetcode 43. 字符串相乘(模拟 字符串多个相加)
Leetcode 199.二叉树的右视图(BFS)
Leetcode 494. 目标和(DP 背包问题)
Leetcode 144. 二叉树的前序遍历(迭代 栈 模板解法)
Leetcode 42. 接雨水(单调栈 遇到更大的就相加并弹出)⭐
Leetcode 622. 设计循环队列(注意head和rear的取值)
Leetcode 23. 合并 K 个升序链表(优先队列和归并都要会!!!)⭐
Leetcode 54. 螺旋矩阵(注意边界)
Leetcode 169. 多数元素(摩尔投票法)
剑指 Offer 22. 链表中倒数第k个节点(快慢指针)
Leetcode 236. 二叉树的最近公共祖先(递归)⭐
Leetcode 525. 连续数组(哈希表+前缀和)⭐
Leetcode 227. 基本计算器 II(栈的应用)⭐⭐
Leetcode 105. 从前序与中序遍历序列构造二叉树(多刷)⭐
Leetcode 106. 从中序与后序遍历序列构造二叉树(原理同上 注意下标区间)
Leetcode 179. 最大数(注意排序方式)
Leetcode 692. 前K个高频单词(哈希表+优先队列)⭐
Leetcode 股票问题集合(注意降维,第i天可以去掉)
Leetcode 103. 二叉树的锯齿形层序遍历(注意左右遍历交替)
Leetcode 200. 岛屿数量(DFS BFS)
Leetcode 1143. 最长公共子序列(经典LCS DP)
Leetcode 384. 打乱数组(洗牌算法)
Leetcode 128. 最长连续序列(集合自动排序)
Leetcode 63. 不同路径 II(DP)
Leetcode 226. 翻转二叉树(递归)
Leetcode 134. 加油站(贪心)⭐
Leetcode 378. 有序矩阵中第 K 小的元素(优先队列 和合并多个链表一样)⭐
Leetcode 94. 二叉树的中序遍历(迭代 递归)
Leetcode 26. 删除有序数组中的重复项(快慢指针)
Leetcode 295. 数据流的中位数(大小根堆)
Leetcode 69. x 的平方根 (二分)⭐
Leetcode 394. 字符串解码(栈)⭐
Leetcode 82. 删除排序链表中的重复元素 II(注意细节 常规链表题)
Leetcode 92. 反转链表 II(常规链表题 注意细节)
Leetcode 75. 颜色分类(荷兰国旗问题 两次遍历)
Leetcode 143. 重排链表(链表综合题)
Leetcode 78. 子集(回溯 元素无重不可复选)
Leetcode 59. 螺旋矩阵 II(简单撞墙法)
Leetcode 189. 轮转数组
Leetcode 718. 最长重复子数组(DP)
Leetcode 148. 排序链表(链表归并)⭐
Leetcode 46. 全排列(回溯 元素无重不可复选)
Leetcode 88. 合并两个有序数组(双指针倒序)
Leetcode 31. 下一个排列(两次遍历 先找到较小者,再找较大者)⭐
Leetcode 240. 搜索二维矩阵 II(从左下角开始)
Leetcode 11. 盛最多水的容器(双指针)
Leetcode 115. 不同的子序列(DP 从后往前遍历)
Leetcode 337. 打家劫舍 III(map优化)⭐
Leetcode 72. 编辑距离(动态规划经典题目 记得初始化)⭐
Leetcode 56. 合并区间(排序)
Leetcode 34. 在排序数组中查找元素的第一个和最后一个位置(二分找边界)
Leetcode 74. 搜索二维矩阵(二分)
Leetcode 518. 零钱兑换 II(背包问题,可以重复)⭐
Leetcode 567. 字符串的排列(滑动窗口)
Leetcode 45. 跳跃游戏 II(取最大值 用end下标记录)⭐
Leetcode 55. 跳跃游戏
Leetcode 1345. 跳跃游戏 IV(BFS)
Leetcode 50. Pow(x, n)(快速幂)⭐
Leetcode 129. 求根节点到叶节点数字之和(递归 注意出递归条件)
Leetcode 739. 每日温度(单调栈)⭐
Leetcode 221. 最大正方形(DP 找最长边)⭐
Leetcode 300. 最长递增子序列(DP LIS)⭐
Leetcode 113. 路径总和 II(DFS)
Leetcode 19. 删除链表的倒数第 N 个结点(快慢指针)
Leetcode 7. 整数反转(注意边界)
Leetcode 287. 寻找重复数(环形链表类似)⭐
Leetcode 907. 子数组的最小值之和(单调栈)
Leetcode 209. 长度最小的子数组(滑动窗口)
Leetcode 39. 组合总和(回溯)
Leetcode 95. 不同的二叉搜索树 II(二叉搜索树的构造)⭐
Leetcode 96. 不同的二叉搜索树(递归、DP)
Leetcode 51. N 皇后(经典回溯)
Leetcode 28. 找出字符串中第一个匹配项的下标(KMP)⭐
Leetcode 127. 单词接龙(BFS 难)
Leetcode 198. 打家劫舍(DP)
Leetcode 22. 括号生成(回溯)
Leetcode 10. 正则表达式匹配(DP 注意base case)⭐
Leetcode 83. 删除排序链表中的重复元素(常规链表题)
Leetcode 951. 翻转等价二叉树(递归)⭐
Leetcode 62. 不同路径(DP)
Leetcode 139.单词拆分(DP)⭐
Leetcode 15. 三数之和(递归)
Leetcode 329. 矩阵中的最长递增路径(DFS)
Leetcode 111. 二叉树的最小深度(DFS)⭐
Leetcode 695. 岛屿的最大面积(DFS)
Leetcode 232. 用栈实现队列(栈模拟)
Leetcode 225. 用队列实现栈(队列模拟)
Leetcode 84. 柱状图中最大的矩形(单调栈)
Leetcode 560. 和为 K 的子数组(前缀和+哈希表)
Leetcode 154. 寻找旋转排序数组中的最小值 II(二分)⭐
Leetcode 33. 搜索旋转排序数组(二分)⭐
Leetcode 162. 寻找峰值(二分)⭐
Leetcode 208. 实现 Trie (前缀树)⭐
Leetcode 523. 连续的子数组和(前缀和)⭐
Leetcode 283. 移动零(快慢指针)
Leetcode 24. 两两交换链表中的节点(递归 迭代)
Leetcode 877. 石子游戏(DP 博弈)⭐
Leetcode 724. 寻找数组的中心下标(左右两边相等)
Leetcode 451. 根据字符出现频率排序(哈希+优先队列)
Leetcode 679. 24 点游戏(递归)⭐
Leetcode 994. 腐烂的橘子(BFS)
Leetcode 137. 只出现一次的数字 II(位运算)⭐
Leetcode 260. 只出现一次的数字 III(位运算)
Leetcode 剑指 Offer 51. 数组中的逆序对(归并)⭐
Leetcode 530. 二叉搜索树的最小绝对差(中序遍历)
Leetcode 41. 缺失的第一个正数(原地哈希 多刷)⭐
Leetcode 409. 最长回文串(贪心)
Leetcode 206. 反转链表(递归 迭代)
Leetcode 316. 去除重复字母(类似单调栈)⭐
第二轮刷题
第二轮刷题中,我就不挨个把每道题都写上来了,我记录的都是我没做出来、或者说看到这道题还需要进行思考,debug的题目,而对于那种一眼能知道方法并且做出来的,就不再记录于此了。这部分主要是去刷CodeTop和LC Hot100,其中几个经典困难题要着重刷,比如接雨水、编辑距离、正则表达式、最大矩形。
Leetcode 543. 二叉树的直径(后序遍历 求最高高度)
Leetcode 992. K 个不同整数的子数组(滑动窗口 “恰好”)
Leetcode 71. 简化路径(字符串业务题)
Leetcode 1239. 串联字符串的最大长度(回溯)
Leetcode 679. 24 点游戏(回溯)
Leetcode 128. 最长连续序列(哈希表)
Leetcode 662. 二叉树最大宽度(BFS 满二叉树性质)
Leetcode 297. 二叉树的序列化与反序列化(前序遍历)
Leetcode 138. 复制带随机指针的链表(哈希表)
Leetcode 402. 移掉 K 位数字(单调栈)
Leetcode 224. 基本计算器(栈)
Leetcode 207. 课程表(BFS 拓扑)
Leetcode 47. 全排列 II(元素可重不可复选)
Leetcode 958. 二叉树的完全性检验(BFS)
Leetcode 498. 对角线遍历(对角线条数)
Leetcode 40. 组合总和 II(回溯 注意排除重复情况)
Leetcode 440. 字典序的第K小数字(字典树)
Leetcode 450. 删除二叉搜索树中的节点(中序遍历)
Leetcode 16. 最接近的三数之和(多刷)
Leetcode 49. 字母异位词分组(哈希表)
Leetcode 238. 除自身以外数组的乘积(左右遍历)
Leetcode 41. 缺失的第一个正数(原地哈希 多刷)⭐⭐
Leetcode 406. 根据身高重建队列(从高到低排序)
Leetcode 146. LRU 缓存⭐
Leetcode 108. 将有序数组转换为二叉搜索树(数组中间值为root)
Leetcode 114. 二叉树展开为链表(后序遍历)
Leetcode 124. 二叉树中的最大路径和(后序)
Leetcode 208. 实现 Trie (前缀树)
Leetcode 131. 分割回文串(DP+回溯)
Leetcode 215. 数组中的第K个最大元素(快速选择排序 堆排序)
Leetcode 85. 最大矩形(单调栈)
Leetcode 279. 完全平方数(DP)
Leetcode 152. 乘积最大子数组(求每一位的最大值和最小值)
Leetcode 416. 分割等和子集(01背包)
Leetcode 32. 最长有效括号(DP 转移方程好好想)⭐
Leetcode 75. 颜色分类(双指针遍历一次)
Leetcode 31. 下一个排列(多刷)⭐⭐
Leetcode 287. 寻找重复数(环形链表)⭐⭐
Leetcode 10. 正则表达式匹配(DP)⭐⭐
第三轮刷题
刷到现在10月7日,力扣刚好刷到400题,记录一下。加上牛客上一些题目,应该有个450多题了吧,这个量用来应付校招应该勉强够了,面试的时候遇到手撕算法题的环节,我基本上都是秒解。如果运气比较好,我后面拿到offer了,应该会发出来吧。到现在也没啥好说的了,只能心里默默祈祷,多努力一分,拿到offer的希望和概率越大。机会总是留给有准备的人,同样,机会只会眷顾等待的人。Hope God Bless me。
这一轮就着重把前两轮的打了星号的题再做一次,记录不能秒解的,希望一轮比一轮记录的题少。
Leetcode 213. 打家劫舍 II(dp 注意两种情况)⭐⭐
Leetcode 525. 连续数组(哈希表+前缀和)⭐⭐
Leetcode 69. x 的平方根(二分)⭐⭐
Leetcode 337. 打家劫舍 III(map优化)⭐⭐
Leetcode 221. 最大正方形(DP)⭐⭐
Leetcode 95. 不同的二叉搜索树 II(二叉搜索树的构造 注意构造空节点)⭐⭐
Leetcode 28. 找出字符串中第一个匹配项的下标(KMP)⭐⭐
Leetcode 111. 二叉树的最小深度(DFS)⭐
Leetcode 468. 验证IP地址
Leetcode 877. 石子游戏(DP 博弈)⭐⭐
Leetcode 679. 24 点游戏(递归)⭐
Leetcode 137. 只出现一次的数字 II(位运算)⭐⭐⭐
Leetcode 260. 只出现一次的数字 III(位运算)⭐
Leetcode 316. 去除重复字母(类似单调栈)⭐⭐⭐
Leetcode 992. K 个不同整数的子数组(滑动窗口 “恰好”)⭐⭐
Leetcode 71. 简化路径(字符串业务题)⭐
Leetcode 1239. 串联字符串的最大长度(回溯)⭐⭐
Leetcode 128. 最长连续序列(哈希表)⭐
Leetcode 224. 基本计算器(栈)⭐
Leetcode 498. 对角线遍历(对角线条数)⭐
Leetcode 40. 组合总和 II(回溯 注意排除重复情况)⭐
Leetcode 450. 删除二叉搜索树中的节点(中序遍历)⭐⭐
Leetcode 49. 字母异位词分组(自己编码 哈希表)
Leetcode 124. 二叉树中的最大路径和(后序)⭐
Leetcode 279. 完全平方数(DP 零钱兑换问题)⭐
Leetcode 32. 最长有效括号(DP 转移方程好好想)⭐⭐
Leetcode 31. 下一个排列(多刷)⭐⭐⭐
Leetcode 328. 奇偶链表(双指针)⭐
Leetcode 143. 重排链表(链表综合题)⭐⭐
LCR 138. 有效数字
Leetcode 974. 和可被 K 整除的子数组(同余定理 )⭐
Leetcode 435. 无重叠区间(区间合并问题)⭐
Leetcode 404. 左叶子之和
Leetcode 491. 递增子序列(注意和集合区分)⭐
Leetcode 343. 整数拆分(DP)
Leetcode 494. 目标和(DP)
Leetcode 678. 有效的括号字符串(用栈分别(和*存放下标)⭐⭐
Leetcode 114. 二叉树展开为链表(后序遍历)
Leetcode 400. 第 N 位数字
Leetcode 91. 解码方法(DP)⭐
Leetcode 152. 乘积最大子数组(DP)⭐
新刷的题就直接上力扣链接了。
Leetcode 967. 连续差相同的数字(DFS)
Leetcode 1109. 航班预订统计(差分数组)⭐
Leetcode 767. 重构字符串(贪心)
Leetcode 321. 拼接最大数(单调栈)
Leetcode 402. 移掉 K 位数字(单调栈)
Leetcode 316. 去除重复字母(单调栈)⭐
Leetcode 241. 为运算表达式设计优先级(递归)
Leetcode 2563. 统计公平数对的数目(双指针)
Leetcode 1705. 吃苹果的最大数目(堆 优先队列)
Leetcode 958. 二叉树的完全性检验(BFS)