先来自我介绍一下,2020 fall,拿到了 4 个面试,3 个 onsite。刷题两年,断断续续,目前为止总共刷了 500+。刷题的数量只能说个别,次要是刷题的办法,刷什么题,怎么刷题,如何无效的刷题。心愿能通过这份经验总结帮忙到大家,把握刷题技巧。
对于面试中所有的 medium 算法题目,根本都能够秒杀。只有第一个面试挂了(挂在面试技巧下面了),另外三个 onsite 全副拿到 offer 了。明天就来跟大家聊聊这刷题两年来积攒的一些集体感想和一些对算法的了解。
刷题门路
1. 刷 easy 题。 次要寻找做题的感觉。了解算法的基本思路。
2. 刷 linkedlist, tree。 起因一是面试中这两类题考的频率较高,起因二是刷这两类题有助于对递归算法的了解,为前面刷 DFS 打下算法根底。
3. 刷 DFS。DFS 十分重要。因为大部分 brute force 根本都能够用 dfs 来求解。刚开始刷 DFS,能够重点关注 pemutation 和 combination 之类的算法题目,leetcode 这两类算法题也挺多的。而后开始总结,去了解“状态 (state)”这个概念,对于每道 DFS 算法问题,要清晰的定义出“状态(state)”,以及状态如何转移,这方面的根底能够为 DP 算法打下刷题根底。
之前我也加入了 Justin 老师的算法 Camp 课程,对我刷题的帮忙也比拟大。
4. 记忆化搜寻。 也就是 DFS + 记忆。记忆的存储通常用 map 或者 set 即可 5. DP。记忆化搜寻刷熟了,能够尝试开始刷经典的 DP 算法,了解 状态 和 状态转移,尝试本人去写出状态转移方程。尝试 DP 的两种实现形式 top-down(也就是记忆化搜寻) 和 bottom-up。
6. 高频数据结构,stack, queue, heap。这三个数据结构在面试中呈现频率十分高。
7. 算法和数据结构学习应该有怎么样的程序? 我集体犯的谬误就是后期刷题品质和效率太低,埋了很多雷。
首先二分查找左闭右开的 lower_bound 写法肯定要了解。这是一种思维而不是简略的查找数值。排序的话,快排和快排的切分默写水平吧。3 向快排和归并排序也要能默写。
接下来谈谈栈和队列的使用。基于栈 LIFO 的数据结构特点,DFS 的刷题——非递归必定用栈啦。枯燥性栈算法的使用,这个须要本人去领会,队列的话 FIFO 特点 BFS 必定用得上了,BFS 问题比方课程表、接雨水Ⅱ。
优先队列用在哪里 ?topk 系列问题以及依赖于优先队列的 BFS 遍历。二叉堆和二叉树,高度、深度、叶子结点、非叶子节点,这个须要理分明。二叉树基本上用递归算法为主了。
遍历形式:递归、非递归、morris 遍历、高度和深度计算。链表的话考查的比拟少,环检测、翻转链表必须会。树状数组、ST 表就是一个二进制倍增思维的使用,这个在 Justin 老师的心法课外面有提及。UF 的话,也比拟常见,刷题碰到的比较简单,要么连通性判断,要么连通图个数计算。
8. 刷题用什么语言 :从功利性角度来看,JAVA、C++ 比拟稳了。毕竟 leetcode 答案语言版本也是这 2 种最为常见。Python 答案代码是少,代码少并不代表你就能容易了解这个答案。所以 leetcode 讨论区常常会有 show 几行 Python 算法代码 solution,我感觉这并没有提供无效的信息。
9. 其余重点专题: sliding window, sort(特地是疾速排序和归并排序的算法 ),two pointers, graph, bfs, trie, union find
刷题形式
我通常会联合不同的刷题形式。
- 只看题,不写代码。我通常会从 brute force 开始求解,而后逐渐优化。如果 10-20 分钟以内想不出解法,间接去看答案了。
- 对于一道题,精耕细作,触类旁通。精耕细作是指 学习优良代码,一题多解 以及 如何从 brute force 推导到最优解,并且理解这个过程的思路是如何造成的。触类旁通是指看相似的题目,总结独特个性。
- 加入比赛。训练疾速做题,debug,写代码的能力。
其余 tips
- 刷题初期谋求量,一道题不可花太长时间,管制在 30 分钟以内
- 最好不依赖 IDE,训练间接在 leetcode 页面写代码。
- 定期回过头总结刷过的题,了解其中算法的精华。
- 不要自觉刷题,适可而止,刷够了,要转战到面试技巧下面,面试技巧和刷题一样重要。(因为我就有一个面试挂在面试技巧下面,十分悔恨)
刷题感悟: 了解子问题。对于每一个问题,定义子问题是什么,而后如何从子问题推导出原问题的解。对于 DFS,就是穷举每个子问题。DP 算法就是因为存在重叠子问题。贪婪算法就是每次以子问题的最优解作为原问题的最优解。
我集体认为本人的学习能力个别,我感觉大家的能力怎么着都会比我更好,所以如果遇到学习上的问题,也请放弃自信。
心愿能够帮忙到大家!
以上是集体经验总结,欢送大家探讨。
如果大家想要更深刻的理解这方面的教训,欢送大家增加我的微信号,L13509543893。大家一起致力一起学习~ 注明来意 + 简历即可!