拿到acm铜奖可以去大厂吗?

从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操作)

————————————————

看完这个回答后,有件小事,能帮助你快速提升自己哟:

免费试听我主讲的九章算法班 2021,除了会讲如何高效刷题、掌握面试算法外,还会谈谈面试中正确沟通的技巧,培养coding style和bug free的能力。覆盖90%国内外一线大厂算法面试高频考点,帮助你1个月内搞定算法面试。首节直播分享中,将会送出算法面试精选100题,刷题100道胜过别人刷300道,有兴趣的同学可以来看看!

  • 29
    点赞
  • 332
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值