哈喽大家好,我是厨子。
今天给大家唠唠面试常考的算法题。
现在企业招聘越来越注重考察算法能力,主要有下面三种形式
- 笔试
- 面试时现场编码
- 针对某个题目,说出解决思路(无需编码)
今天咱们主要说说,现场编码时的面试题目及准备方法。
面试时的题目难度大多是较经典的简单题和中等题,偶尔会有困难题。
有的公司喜欢上来先让你做个题,然后再对你提问问题,有的则喜欢先提问,最后再做题。
所以这个时候,如果你前面和面试官聊的很开心,那么题目可能就是一个常见的简单题,比如反转链表,二叉树的层序遍历等。
这时有同学要问了,平常我们做题,遇到没做过的题目,就会没太有思路,要做挺久,才能执行成功,那面试的时候,岂不是和面试官大眼瞪小眼,一脸懵逼了。
没有那么夸张,因为面试时我们遇到的算法题,多是我们做过的经典题目。很少有没做过的题目,即使有新题,大多也是根据原来的题改编而成,只要稍微修改一下即可。
当然如果遇到完全没有思路的时候,面试官也会帮助你,给你一些提示,帮助你完成题目,另外大多时候也不需要你 AC,只需要编写代码,写出你的思路即可。
所以针对面试时现场编码的题目,有以下几条建议。
1.尽量保证代码整洁和思路干净。(代码规范也是考察点)
2.遇到会做的题目,不要太着急,理清思路,再动手。(也是为了贴合第一条,后面会单独写一篇文章)
3.让面试官看懂你的代码逻辑,因为可能你做题的方法和他的方法不一致,所以写代码时,可以简单加些注释,和口头解释,让他能够看懂你的思路。
4.遇到没做过的题目,不要慌张,可以多和面试官交流思路,让他看到你思考过程。
我们只要认真刷题,这个环节完全搞的来,大家前期可以按照标签刷题,多学一些解题思路,注意提升广度,后面的话则多刷热门题,《剑指 offer》,《力扣 hot 100》等。也可以按照企业题库刷,那些常考的题目多刷几遍,来回刷。
另外再给大家推荐一个好用的刷题网站,Acwing ,刷题模式为 ACM 模式,更能锻炼你的代码能力。
好啦,想说的就这些啦,希望能够对你们有一丢丢帮助。
给大家整理了一些高频的大厂面试真题,并将其按标签进行了分类,大家可以先收藏,后面针对性练习。
经典题目汇总,大家可以看这个文章
经典题目解析
数组
- 121.买卖股票的最佳时机
- 88.合并两个有序数组
- 56.合并区间(有时会有变形题)
- 209.长度最小的子数组
- 4.寻找两个正序的中位数(会让你写最优解)
排序相关
- 快速排序
- 归并排序
- 堆排序
- 数组中的第K个最大元素
这一块考的还挺多,甚至还有公司考过归并排序的迭代法,不过咱们小屋也有具体可以看这个文章
今天说的是必须要熟练掌握的归并排序
一个快速排序写了快 10000 字?
一个破堆排我搞了 4 个动画?
哈希表
- 3.无重复字符的最长子串
- 76.最小覆盖子串
- 347前K个高频元素(有时会进行改编,比如单词啥滴)
链表
- 206.反转链表
- 215.K 个一组翻转链表(会有不同形式,不足K个是否翻转,思路一致,代码略有变化)
- 23.合并K个升序链表
- 环形链表
栈和队列
- 32.最长有效括号
- 20.有效的括号(会有改编)
栈和队列详解
深搜广搜
- 岛屿数量
- 岛屿面积等
- 二叉树路径相关
这一块考察的内容还是很多的,大家可以多刷一些,尽量拓展自己的解题思路。
二分
- 33.搜索旋转排序数组
- 153.寻找排序数组中的最小值
- 300.最长递增子序列
- 69.sqrt()
- 34.在排序数组中搜索第一个位置和最后一个位置
二分查找的考察不再是最基本的形式,多是考察各种变种。二分查找的总结大家可以看下这篇文章。
穿了好几个马甲,差点没认出来是二分查找
单调队列单调栈
- 42.接雨水
- 239.滑动窗口最大值(会有变形)
- 739.每日温度
深入浅出搞通单调队列单调栈
二叉树
- 二叉树的各种遍历(前后中,Z字形等)
- 思路都大同小异,加一些标志位即可
- 求二叉树序列相关(根据前序中序求后序等)
- 236.二叉树最近公共祖先
- 124.二叉树最大路径和
二叉树的考察是非常多的,很多都是使用递归来解题,大家可以多刷一些二叉树标签下的题目。
关于二叉树,大家可以看这几篇文章
把二叉树揉碎
有趣
这种遍历方式爱了!
比之前两个难?
回溯
- 排列相关问题
- 组合相关问题
- 子集
- 39.组合总和
- 494.目标和
- 93.复原IP地址
- 51.N皇后
会经常考原题或者改编题,回溯是重要考点。
动态规划
- 53.最大子序和(会有变形,比如区间的坐标)
- 322.零钱兑换
- 300.最长上升子序列
- 62.不同路径
- 221.最大正方形
- 64.最小路径和(遇到了好几回这个题目)
动态规划是考察热门,所以大家可以多刷一些动态规划的题目,后面我也会从简单到复杂为大家更新一些动态规划相关题目。其实在很早的时候我们就学过这个算法。
其他
- 48.旋转图像
- 54.旋转矩阵
- 146.LRU缓存机制
- 15.三数之和
- 字符串压缩
- 470.Rand7()实现Rand10()
- 设计栈或者队列
- 字符串匹配算法
- 二分查找递归版
- 73.矩阵置零
推荐阅读:
字符串匹配算法详解
一文把三个经典求和问题吃的透透滴。
个人建议上面这些题目要做的烂熟于心,很多笔试或者面试题目都是原题或者改编而来,只有熟练之后才能想到改编题的解。
上面很多题目都在我的仓库有了动画解析和模拟,后面也会继续补充。
https://github.com/chefyuan/algorithm-base
我也会在后面的文章中,多多更新高频面试题目,希望能够对大家有一丢丢帮助。
另外我建了一个秋招群,有需要的可以进一下。