社招校招面试高频题目 - 母题算法篇

最近要社招面试,leetcode题目太多了,总结了一波。
以下题单来自于:LeetcodeHot100题单、codeTop网站、灵神题单、Leetcode前300题目 然后总结。
算法题单:
双指针 1.1 排序 + 双指针 求和问题 解法:先对数组排序,固定左边,左右指针 L = i + 1, R = n - 1,左右两边去重
题目:
三数之和
最接近的三数之和
四数之和
两数之和 II
1.2 双指针-求面积问题 解法:初始化 left = 0, right = n - 1,前后指针求出最大值和较大值
题目:
盛最多水的容器
接雨水
1.3 原地修改 解法:一个指针记录目标位置,一个指针遍历数组,进行交换或覆盖操作
题目:
移动零
删除排序数组中的重复项
移除元素
颜色分类
寻找重复数
1.4 双指针 单字符串题目 解法:预处理后使用双指针从两端向中间或同向移动
题目:
验证回文串
验证回文串 II
反转字符串
实现 strStr
1.5 快慢指针 链表题 解法:慢指针每次移动1步,快指针每次移动2步或其他策略
题目:
环形链表
环形链表 II
删除链表的倒数第 N 个结点
回文链表
旋转链表
分隔链表
1.6 双指针 双数组 解法:指针分别指向两个数组,根据条件移动指针
题目:
合并两个有序数组
两个数组的交集 II
面试题 16.06. 最小差
1.7 双指针(双字符串匹配) 解法:指针分别遍历主串和模式串,进行匹配判断
题目:
判断子序列
匹配子序列的单词数
滑动窗口
2.1 保证窗口内字符或数字出现的次数问题 解法:使用map记录字符出现位置或次数,维护窗口内字符特性
题目:
无重复字符的最长子串
至少有 K 个重复字符的最长子串
水果成篮
2.2 经过多个操作后,保证窗口出现的次数问题 解法:维护窗口内特定元素的个数,根据条件扩展或收缩窗口
题目:
最大连续1的个数 III
将 x 减到 0 的最小操作数
2.3 求所有窗口问题 解法:使用双端队列等数据结构维护窗口极值或统计信息
题目:
滑动窗口最大值
长度最小的子数组
最小区间
滑动窗口中位数
2.4 多个字符串比较问题 解法:使用needMap记录目标字符串字符出现次数,滑动窗口匹配
题目:
找到字符串中所有字母异位词
串联所有单词的子串
最小覆盖子串
贪心算法
3.1 贪心应用问题 解法:根据局部最优选择达到全局最优解
题目:
加油站
买卖股票的最佳时机
分发糖果
3.2 贪心求最大覆盖区间问题 解法:维护当前能到达的最远位置,贪心选择跳跃点
题目:
跳跃游戏
跳跃游戏 II
划分字母区间
无重叠区间
3.3 求子数组问题 解法:维护当前和和最大和,贪心扩展或重置子数组
题目:
最大子数组和
3.4 求数字最大问题 解法:使用单调栈或字典序贪心构造最大数字
题目:
移掉 K 位数字
去除重复字母
拼接最大数
递归
4.1 单递归验证数字问题 解法:递归验证数字特性,如幂次、数字统计等
题目:
2 的幂
Pow(x, n)
数字 1 的个数
4.2 单递归 操作链表问题 解法:递归到底部,在归的过程中重新连接指针
题目:
反转链表
回文链表
两两交换链表中的节点
移除链表元素
4.3 双递归 打印节点信息问题 解法:主函数处理根节点,递归调用左右子树
题目:
二叉树的中序遍历
二叉树的右视图
4.4 双递归 判断相同问题 解法:递归比较子树结构与值,判断对称性、相同性等
题目:
对称二叉树
相同的树
平衡二叉树
验证二叉搜索树
另一棵树的子树
4.5 双递归 求和问题 解法:递归求解子树深度或路径和,维护全局最优解
题目:
二叉树的最大深度
二叉树的最小深度
二叉树的直径
路径总和 I
路径总和 II
二叉树中的最大路径和
斐波那契数
4.6 双递归 操作链表/树结构 解法:递归构建或转换树结构,如前序中序构造二叉树等
题目:
翻转二叉树
将有序数组转换为二叉搜索树
有序链表转换二叉搜索树
二叉树展开为链表
从前序与中序遍历序列构造二叉树
恢复二叉搜索树
4.7 双递归 搜索问题 解法:递归查找目标节点或值,利用BST特性优化搜索
题目:
二叉搜索树中第 K 小的元素
二叉树的最近公共祖先
二叉搜索树的最近公共祖先
4.8 4 递归问题(二维网格 DFS) 解法:递归在二维网格中进行深度优先搜索,标记访问过的位置
题目:
岛屿数量
单词搜索
4.9 N 叉树递归问题 解法:递归遍历所有子节点,前序或后序遍历
题目:
N叉树的前序遍历
N叉树的后序遍历
回溯算法
5.1 子集问题 解法:递归函数从 start 开始遍历,避免重复
题目:
子集
子集 II
5.2 组合问题 解法:排序数组便于剪枝,使用 path 存储当前组合
题目:
组合总和
组合总和 II
电话号码的字母组合
括号生成
格雷编码
5.3 排列问题 解法:使用 path 存储当前路径,用 visited 数组标记已使用元素
题目:
全排列
全排列 II
排列序列
5.4 分割问题 解法:使用 DFS 递归处理每个可能的子串分割点
题目:
划分为k个相等的子集
单词拆分 II
分割回文串
5.5 字符串匹配问题 解法:使用回溯处理正则或通配符匹配的复杂情况
题目:
正则表达式匹配
通配符匹配
5.6 约束满足问题 解法:使用回溯尝试所有可能解,满足约束时返回
题目:
N皇后
解数独
复原 IP 地址
累加数
分治
6.1 二分搜索(峰值查找) 解法:左边界 left = 0,右边界 right = n - 1,比较 mid 与 mid+1 判断趋势
题目:
寻找峰值
山脉数组的峰顶索引
6.2 二分搜索(旋转数组) 解法:使用标准二分框架,判断有序侧以决定搜索方向
题目:
寻找旋转排序数组中的最小值
搜索旋转排序数组
6.3 二分搜索(二维矩阵) 解法:从右上角或左下角开始,利用有序性排除行或列
题目:
搜索二维矩阵
搜索二维矩阵 II
6.4 二分答案(最值优化) 解法:在可能范围内二分答案,验证可行性(如吃香蕉速度)
题目:
爱吃香蕉的珂珂
在 D 天内送达包裹的能力
动态规划
7.1 一维DP(斐波那契类) 解法:状态定义:dp[i] 表示到达第 i 阶的方法数,dp[i] = dp[i-1] + dp[i-2]
题目:
爬楼梯
打家劫舍
7.2 一维DP(字符串分割) 解法:dp[i] 表示 s[0:i] 能否被字典中的单词分割
题目:
单词拆分
分割回文串 II
7.3 二维DP(区间DP) 解法:dp[i][j] 表示 s[i:j] 是否为回文串,从长度小的子串开始递推
题目:
最长回文子串
回文子串
7.4 背包问题(01背包) 解法:计算数组总和 sum,若为奇数返回 false;目标为 sum/2 的子集和
题目:
分割等和子集
目标和
7.5 二维DP(网格路径) 解法:dp[i][j] 表示从左上角到 (i,j) 的路径总数或最小路径和
题目:
不同路径
最小路径和
7.6 二维DP(双字符串) 解法:dp[i][j] 表示 text1[0:i] 和 text2[0:j] 的最长公共子序列(LCS)
题目:
最长公共子序列
最长重复子数组
编辑距离
正则表达式匹配
通配符匹配
图论
8.1 BFS(多源最短路径) 解法:初始化队列,加入所有起始点(如腐烂橘子),进行多源 BFS
题目:
腐烂的橘子
二叉矩阵中的最短路径
8.2 DFS(连通分量) 解法:遍历网格每个位置,若为未访问陆地则启动 DFS 计算连通块
题目:
岛屿数量
岛屿的最大面积
8.3 拓扑排序(环检测) 解法:构建邻接表和入度数组,使用 Kahn 算法或 DFS 检测环
题目:
课程表
课程表 II
排序
9.1 堆排序(优先队列) 解法:使用小根堆维护前 K 大元素,或用堆实现堆排序
题目:
前 K 个高频元素
数组中的第K个最大元素
9.2 快速排序(分治) 解法:选择基准 pivot(可随机),分区后递归左右子数组
题目:
排序数组
摆动排序 II
9.3 桶排序(频率分布) 解法:按频率将元素放入桶中,再从高到低取出
题目:
根据字符出现频率排序
前 K 个高频元素
模拟
10.1 边界模拟(矩阵遍历) 解法:定义上、下、左、右四个边界,按顺时针顺序遍历元素,每遍历完一边收缩边界
题目:
螺旋矩阵
螺旋矩阵 II
10.2 多维验证(规则检查) 解法:创建行、列、3×3 九宫格的标记数组,遍历数独一次,检查是否有重复数字
题目:
有效的数独
解数独
全部评论

相关推荐

雨夜迈巴赫:蓝桥杯以前就没啥含金量,今年更是被工信部除名。但是如果你有时间去准备比赛的话,我还是推荐你参加,你学的算***在面试中用到,至于钱的话不用太在意,你得奖了不旦报销报名费还有奖金,交了钱你反而会有学习的动力,就算拿不了奖当做是对自己的投资也不亏。不过算法的学习不是一蹴而就的,是需要花大量时间学习和练习的,希望你能坚持下去
点赞 评论 收藏
分享
评论
3
10
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务