2022届艰难秋招(已逝)算法总结!
【摘要】 1.算法题对于大厂秋招算法题是必须的,从投递简历开始(一般找内推),首先主要是笔试,笔试过了才会有后续,而笔试主要是常见的算法题(大厂为主),还有一些中厂会包含一些基础知识,包括计算机网络、操作系统、数据库等,百度正式批的笔试是在2021年9月7日,本人笔试没有答好,笔试成绩为题目的一半左右,鉴于后端开发投的人太多了,所以这个成绩没有进面试,但是给了个机会,面试安卓开发,也就尝试面试了一下...
1.算法题
对于大厂秋招算法题是必须的,从投递简历开始(一般找内推),首先主要是笔试,笔试过了才会有后续,而笔试主要是常见的算法题(大厂为主),还有一些中厂会包含一些基础知识,包括计算机网络、操作系统、数据库等,
- 百度正式批的笔试是在2021年9月7日,本人笔试没有答好,笔试成绩为题目的一半左右,鉴于后端开发投的人太多了,所以这个成绩没有进面试,但是给了个机会,面试安卓开发,也就尝试面试了一下。因为面试官知道是后端调剂过去的,所以不会在安卓问题上进行刁难,主要是一些基础知识+算法,面试流程和提前批一样都是在一天内连续面完。
- 网易音乐、网易有道在去年的笔试更为夸张,题目相对简单,做对了3.5/4,但是没有进入面试,竞争比较激烈。
- 小红书笔试时间8月中旬,但是题目较难,本人也直接挂了。
- 9月开始,是笔试的高峰期,所以会有一些冲突的公司,所以在投递的时候要安排好时间,可以舍弃一些练手的公司。
2.常见的算法题目总结(部分)
2.1 链表/双指针
- 1:两数之和 II - 输入有序数组
- 2:反转链表
- 3:链表交点
这类问题主要是双指针解决,而双指针又可以分为
快慢指针
、前后双指针
、正常双指针(一般有一定间距,同时从头开始)
2.2 栈/队列
- 1:用两个栈实现队列
- 2:用两个队列实现栈
- 3:最小值栈
这类问题主要了解栈和队列的不同,对于java来说,有封装好的类,要懂得编码,另外
单调栈
这部分要注意。
2.3 二分查找
- 1:大于给定元素的最小元素
- 2:有序数组的 Single Element
- 3:寻找旋转排序数组中的最小值
这类问题主要解决步骤:先排序,然后查找,需要注意的是边界问题。
2.4 回溯
思路:
回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。
回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法。
无返回值框架:返回所有结果
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
有返回值框架:只要找到一个即可
result = []
def bool backtrack(路径, 选择列表):
if 满足结束条件:
return true
for 选择 in 选择列表:
做选择
if(backtrack(路径, 选择列表)) return true
撤销选择
无返回值框架,多组回溯:返回所有结果
result = []
def backtrack(路径, 选择列表):
if 多组满足递归结束条件:
return
if 满足结束条件:
result.add(路径)
backtrack(路径,选择列表-1);
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
有返回值框架,多组回溯:只要找到一个即可
result = []
def bool backtrack(路径, 选择列表):
if 多组满足递归结束条件:
return true
if 满足结束条件:
return backtrack(路径,选择列表-1);
for 选择 in 选择列表:
做选择
if(backtrack(路径, 选择列表)) return true
撤销选择
注: 简单来说,递归就是不断调用自己,但是当递归中有了搜索、返回、不断剪枝的过程就成了回溯-可以看成dfs,可以看到回溯其实包含递归,回溯是一种算法的思想,而递归是一个算法结构。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)