从ACM选手的角度讲:
为什么ACM选手在大家眼里都这么牛逼,原因就是很多ACM选手从中学就开始打比赛,你想想看,在你大学才懂一些简单的数据结构和算法的时候,这些中学生就已经ACM竞赛中畅游了。当然,也不是所有人都这样,比如我就不属于这一批,本人大一才开始准备。
除此之外,ACM的题目都很难,难到什么程度?本人在准备期间刷题刷到一度恶心。ACM竞赛很注重选手的分析和思维两方面的能力,在算法和数据结构这样已经足够复杂的题型下,还要进行大量的变形,所以没有一个高强度的培训是不可能有能力参赛。
所以,经历过ACM竞赛的非人锻炼,还坚持下来,并且还有能力拿奖的人一定都非常出色,至少在算法方面比大部分的候选人都要强。
从面试官的角度讲:
但是作为曾经腾讯的面试官,我想说的是,如果你只是为了应付面试而参加ACM,是完全没有必要的。毕竟,准备ACM比赛至少也要三两年的时间。
而算法面试,用一些简单粗暴的方式,准备3~6个月就差不多了。
首先,弄清楚面试考察的高频知识点,这里薅了一个FB大佬讲座上的资料,看过一遍总结的很不错,和我当时算法面试的考察的题型都差不多。讲座是免费的,看了不吃亏,给你们一个地址,戳这里~
最后,再跟着这些知识点总结刷题就对了。
有些人可能会质疑这样的可行性,但是想做出面试的算法题,真的就这么简单。不过一定要精刷题目,精刷到遇到同类型的题目可以直接手撕,请对自己狠一点!
下面我也根据高频考点,和自己以前做面试官出题的尿性**,整理出了一套面试考察几率非常高的算法面试考察题型,以及对应必刷的题目。**这些题目如果都掌握的游刃有余,我觉得面试就没什么大问题了。
1、排序算法 Sorting
第k大元素
会议室II
有序数组的平方
最佳见面地点
摆动排序II
复杂度
• 时间复杂度:
○ 快速排序(期望复杂度) : O(nlogn)
○ 归并排序(最坏复杂度) : O(nlogn)
• 空间复杂度:
○ 快速排序 : O(1)
○ 归并排序 : O(n)
2、动态规划 Dynamic Programming
最长回文子串
换硬币
单词拆分I
正则表达式
最大连续上升子序列
打劫房屋
完美平方
最小划分
跳跃游戏
• 使用场景:
○ 求方案总数(90%)
○ 求最值(80%)
○ 求可行性(80%)
• 不适用的场景:
○ 找所有具体的方案(准确率99%)
○ 输入数据无序(除了背包问题外,准确率60%~70%)
○ 暴力算法已经是多项式时间复杂度(准确率80%)
• 动态规划四要素(对比递归的四要素):
○ 状态 (State) – 递归的定义
○ 方程 (Function) – 递归的拆解
○ 初始化 (Initialization) – 递归的出口
○ 答案 (Answer) – 递归的调用
• 几种常见的动态规划:
• 背包型
○ 给出 n 个物品及其大小,问是否能挑选出一些物品装满大小为m的背包
○ 题目中通常有“和”与“差”的概念,数值会被放到状态中
通常是二维的状态数组,前 i 个组成和为 j 状态数组的大小需要开 (n + 1) * (m + 1)
3、双指针算法 Two Pointers
有效回文II
分割标签
飞机上看电影
装最多水的容器
对数组变换排序
字符大小写排序
在LR字符串中交换相邻字符
7. 滑动窗口 (90%)
8. 时间复杂度要求 O(n) (80%是双指针)
9. 要求原地操作,只可以使用交换,不能使用额外空间 (80%)
10. 有子数组 subarray /子字符串 substring 的关键词 (50%)
11. 有回文 Palindrome 关键词(50%)
• 时间复杂度:O(n)
○ 时间复杂度与最内层循环主体的执行次数有关
○ 与有多少重循环无关
• 空间复杂度:O(1)
○ 只需要分配两个指针的额外内存
4、二分法 Binary Search
在排序数组中找接近的K个数
寻找旋转排序数组中的最小值
两数交集
俄罗斯套娃信封
加热器
扇形数组的顶峰坐标
有序矩阵中的第k小元素
完全平方数
1. 排序数组 (30-40%是二分)
2. 当面试官要求你找一个比 O(n) 更小的时间复杂度算法的时候(99%)
3. 找到数组中的一个分割位置,使得左半部分满足某个条件,右半部分不满足(100%)
4. 找到一个最大/最小的值使得某个条件被满足(90%)
5. 时间复杂度:O(logn)
6. 空间复杂度:O(1)
5、宽度优先搜索 BFS
不同岛屿的个数
序列重构
迷宫II
课程表
最大子数组
墙和门
二叉树的右视图
最短路径
12. 拓扑排序(100%)
13. 出现连通块的关键词(100%)
14. 分层遍历(100%)
15. 简单图最短路径(100%)
16. 给定一个变换规则,从初始状态变到终止状态最少几步(100%)
• 时间复杂度:O(n + m)
○ n 是点数, m 是边数
• 空间复杂度:O(n)
6、深度优先搜索 DFS / 递归 Recursion
有效的括号序列
在排序数组中找最接近的K个数
有效回文串
序列重构
斐波那契数列
• 找满足某个条件的所有方案 (99%)
• 二叉树 Binary Tree 的问题 (90%)
• 组合问题(95%)
○ 问题模型:求出所有满足条件的“组合”
○ 判断条件:组合中的元素是顺序无关的
• 排列问题 (95%)
○ 问题模型:求出所有满足条件的“排列”
○ 判断条件:组合中的元素是顺序“相关”的。
不要用 DFS 的场景
17. 连通块问题(一定要用 BFS,否则 StackOverflow)
18. 拓扑排序(一定要用 BFS,否则 StackOverflow)
19. 一切 BFS 可以解决的问题
• 时间复杂度:O(方案个数 * 构造每个方案的时间)
○ 树的遍历 : O(n)
○ 排列问题 : O(n! * n)
○ 组合问题 : O(2^n * n)
7、二叉树的搜索算法 Traversal
必刷题目:
二叉树的层次遍历
二叉查找树的中后续后继
最近公共祖先
二叉树查找树中的搜索区间
• 二叉树相关的问题 (99%)
• 可以一分为二去分别处理之后再合并结果 (100%)
• 数组相关的问题 (10%)
时间复杂度 O(n)
空间复杂度 O(n) (含递归调用的栈空间最大耗费)
8、堆 Heap
丑数 II
K个最近的点
会议室3
特定序列的第K小的数
堆化
K间隔数组排序
20. 找最大值或者最小值(60%)
21. 找第 k 大(pop k 次 复杂度O(nlogk))(50%)
22. 要求 logn 时间对数据进行操作(40%)
堆不能解决的问题
23. 查询比某个数大的最小值/最接近的值(平衡排序二叉树 Balanced BST 才可以解决)
24. 找某段区间的最大值最小值(线段树 SegmentTree 可以解决)
25. O(n)找第k大 (使用快排中的partition操作)
————————————————
以上就是本篇文章【拿到acm铜奖可以去大厂吗?】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/6452.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多