在北美对于机器学习类的Data Scientist/Applied Scientist,这类岗位的核心工作职责是:能够完成end-to-end的机器学习项目,能够跟踪并且理解最新的机器学习理论,并开发适合公司应用场景的新算法。而与之对应的核心技能要求便是:
· 有OOP编程基础
· 熟悉主流机器学习和深度学习框架
· 熟悉主流大数据框架
· 熟悉主流机器学习和深度学习算法
· 有跟踪和复现最新论文的能力
· 有将商业问题转化为机器学习问题的能力
因此关于是否需要刷LeetCode,我的答案是:需要。
明确了刷题的必要性后,我们再来说一说究竟这题应该怎么刷:
1. 掌握一门基本的编程语言
如果你对语言没有很强的preference的话,我推荐面对对象语言Java用来刷题,首先Java语言本身就业市场很大,学这个找工作肯定没坏处,而且语言本身的设计也很优良。将Java作为面试语言,能传递给面试官自己有稳固编程基础的信号。当时如果你的Python基础很好的,用python也没有问题。这两种是面试最常用的语言。
2. 深入理解基础的数据结构
数据结构的掌握是正式刷题前的预备工作,也只有充分理解基础数据结构的原理,才能明白特定数据结构,之所以会在特定题型中常被使用的原因。理解不同的数据结构特性后,也会帮助我们更好地分析时间和空间复杂度。
3. 分类刷题
我们常考的算法类型完全是可以分类的,比如Binary Search,Recursion,DFS,BFS,我们刷题的时候一定要一类一类的刷,千万不要简单地按照easy, medium, hard的顺序来随机刷题,很容易越刷越乱,无法建立成体系的刷题套路。一类的题目是有很高的相似度的,解题方式和思路上很多时候也是类似的,这样一类一类的题目刷会更容易帮你总结出这一类题目的思考方式和解题方法。当然一类的题目数量也很多,你可以按照frequency从高到底去做,完全没有问题。
除此之外,一个很普遍的现象是很多的同学刷题的时候很喜欢刷高频题目,却不去深入思考为什么高频题目之所以常被考的原因。高频题目之所以常常被考,就是因为考察的知识点很全面,很多高频题往往是由一些基础的低频题目延伸出来的。只刷高频题,却不去了解背后考察的知识点,其实是主次颠倒,这也就是为什么很多的同学会发现自己刷了很多题遇到新题又不会了的情况。
只有深入理解算法的基础知识,并掌握常见的基本套路后,加上系统性的练习计划,才能融会贯通,达到一道算法题到手,就快速想出正确思路的效果。
还有的同学会问刷题是需不需要考虑easy刷多少题,medium多少题这样,我觉得在刷题过程中并不需要太刻意的去关注这个,按照frequency一题不拉的往下做就行了。