做好这5点,你也能成为算法大神!
经常有人问起码老思,我们该如何学习算法来应对面试。其实这属于老生常谈的问题了,今天我就结合我多年来的算法学习经验,总结了5点算法学习需要注意的地方,希望对大家有所帮助。
总体来说,准备算法面试需要按照下面的5个步骤进行展开:
1. 掌握一门编程语言
- C的话,推荐Dennis M. Ritchie & Brian W. Kernighan著的《C程序设计语言》,和《C和指针》;
- C++ 则推荐《C++ Primer》,《深度探索C++对象模型》,《Effective C++》。
- Java则推荐《Java编程思想》、《Effective Java》等
掌握好一门语言,不仅仅是看完书就行了,还得经过大量的实践。就像我之前分享的,可以尝试做一些实际的项目来巩固对各个知识点的理解。
2. 学好数据结构基础
这块主要是看书,在我看来没有什么特别的快速途径,只有认真把基础算法吃透,后续的刷题才能事半功倍。这里推荐两本算法的书籍,
-
第一本是 《数据结构与算法分析》,这本属于经典的基础算法,从排序、堆、二叉树到图等,都进行了图文并茂的描述,代码结构也非常严谨。
-
《算法(第4版)》,大师作品,学习算法的经典入门书籍之一,内容涵盖了排序算法、数据结构、图算法、字符串处理、算法分析等方面,非常适合新手。
3. 刷两本经典算法书
我不推荐一开始就直接上手刷Leetcode,在没有了解一些基础的解题策略之前,直接上手会导致前期浪费大量的时间在寻找解题方向。这里推荐两本面试的算法书,上面总结了常见的面试算法题,并对常见题型进行了总结,非常适合在刷题之前培养基础的解题思路和感觉。
- 《剑指Offer》:这本精选谷歌、微软等知名 IT 企业的典型面试题,系统地总结了如何在面试时写出高质量代码,如何优化代码效率,以及分析、解决难题的常用方法。
- 《Cracking the Coding Interview》,中文翻译为《程序员面试金典》,俗称CC150. 可谓是算法面试圣经,LeetCode上的很多题目都源于这本书。这本书覆盖了面试技巧、常见算法题以及通用解题技巧,属于必刷的算法书籍。
4. 开始狂刷LeetCode
1. 按照题目分类刷
LeetCode上已经给每道题打好了标签,我们只需要找到对应的标签点进去即可。注意刷题的时候,一定要按类别来刷,不要今天刷数组、明天刷动态规划、后天刷二叉树,这样到头来都没有一个完整的解题思路,非常浪费时间。
所以我推荐一上来直接按类别,比如先刷数组部分,开始做题的时候也是由易到难,循序渐进,因为很多难题也是由简单的题目一步步变化出来的。当你刷了一定量的某个类别的题目后,你可以归纳总结一些常用的思路,这样以后碰到类似的题目,就会得心应手。
2. 总结解题经验
题目是永远刷不完的,要学会总结解题的方式方法。其实常见的算法无外乎以下几类:
- 基础技巧:分治、二分、贪心
- 排序算法:快速排序、归并排序、计数排序
- 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
- 图论:最短路径、最小生成树
- 动态规划:背包问题、最长子序列
数据结构,主要有如下几种。如果你有认真看完我之前推荐的两本算法书,我相信这些你应该应该熟练掌握了。
- 数组与链表:单 / 双向链表
- 栈与队列
- 哈希表
- 堆:最大堆 / 最小堆
- 树与图:最近公共祖先、并查集
- 字符串:前缀树(字典树) / 后缀树
5. 调整学习心态
学习最忌心浮气躁,急功近利,即便练习了算法,也不一定代表能万无一失通过笔试面试关,因为算法毕竟是面试考察的一部分,我们同时也得加强项目经验和基础知识的学习。
以上的几个步骤下来,短则半年,长则三年,所以需要做好长期学习的准备。如果想要真正的将算法内化为我们的内功,必须循序渐进、一步步学习,不能急于求成。
这套方法是我多年面试学习的总结,希望能对正在准备算法面试,或者想学习算法的你有所帮助。
关注公众号【码老思】,一时间获取最通俗易懂的原创技术干货。
转载自:https://juejin.cn/post/7221739494277546040