likes
comments
collection
share

做好这5点,你也能成为算法大神!

作者站长头像
站长
· 阅读数 18

经常有人问起码老思,我们该如何学习算法来应对面试。其实这属于老生常谈的问题了,今天我就结合我多年来的算法学习经验,总结了5点算法学习需要注意的地方,希望对大家有所帮助。

总体来说,准备算法面试需要按照下面的5个步骤进行展开:

1. 掌握一门编程语言

  • C的话,推荐Dennis M. Ritchie & Brian W. Kernighan著的《C程序设计语言》,和《C和指针》;
  • C++ 则推荐《C++ Primer》,《深度探索C++对象模型》,《Effective C++》。
  • Java则推荐《Java编程思想》、《Effective Java》等

掌握好一门语言,不仅仅是看完书就行了,还得经过大量的实践。就像我之前分享的,可以尝试做一些实际的项目来巩固对各个知识点的理解。

2. 学好数据结构基础

这块主要是看书,在我看来没有什么特别的快速途径,只有认真把基础算法吃透,后续的刷题才能事半功倍。这里推荐两本算法的书籍,

  • 第一本是 《数据结构与算法分析》,这本属于经典的基础算法,从排序、堆、二叉树到图等,都进行了图文并茂的描述,代码结构也非常严谨。 做好这5点,你也能成为算法大神!

  • 《算法(第4版)》,大师作品,学习算法的经典入门书籍之一,内容涵盖了排序算法、数据结构、图算法、字符串处理、算法分析等方面,非常适合新手。

做好这5点,你也能成为算法大神!

3. 刷两本经典算法书

我不推荐一开始就直接上手刷Leetcode,在没有了解一些基础的解题策略之前,直接上手会导致前期浪费大量的时间在寻找解题方向。这里推荐两本面试的算法书,上面总结了常见的面试算法题,并对常见题型进行了总结,非常适合在刷题之前培养基础的解题思路和感觉。

  • 《剑指Offer》:这本精选谷歌、微软等知名 IT 企业的典型面试题,系统地总结了如何在面试时写出高质量代码,如何优化代码效率,以及分析、解决难题的常用方法。

做好这5点,你也能成为算法大神!

  • 《Cracking the Coding Interview》,中文翻译为《程序员面试金典》,俗称CC150. 可谓是算法面试圣经,LeetCode上的很多题目都源于这本书。这本书覆盖了面试技巧、常见算法题以及通用解题技巧,属于必刷的算法书籍。

做好这5点,你也能成为算法大神!

4. 开始狂刷LeetCode

1. 按照题目分类刷

LeetCode上已经给每道题打好了标签,我们只需要找到对应的标签点进去即可。注意刷题的时候,一定要按类别来刷,不要今天刷数组、明天刷动态规划、后天刷二叉树,这样到头来都没有一个完整的解题思路,非常浪费时间。

所以我推荐一上来直接按类别,比如先刷数组部分,开始做题的时候也是由易到难,循序渐进,因为很多难题也是由简单的题目一步步变化出来的。当你刷了一定量的某个类别的题目后,你可以归纳总结一些常用的思路,这样以后碰到类似的题目,就会得心应手。 做好这5点,你也能成为算法大神!

2. 总结解题经验

题目是永远刷不完的,要学会总结解题的方式方法。其实常见的算法无外乎以下几类:

  • 基础技巧:分治、二分、贪心
  • 排序算法:快速排序、归并排序、计数排序
  • 搜索算法:回溯、递归、深度优先遍历,广度优先遍历,二叉搜索树等
  • 图论:最短路径、最小生成树
  • 动态规划:背包问题、最长子序列

数据结构,主要有如下几种。如果你有认真看完我之前推荐的两本算法书,我相信这些你应该应该熟练掌握了。

  • 数组与链表:单 / 双向链表
  • 栈与队列
  • 哈希表
  • 堆:最大堆 / 最小堆
  • 树与图:最近公共祖先、并查集
  • 字符串:前缀树(字典树) / 后缀树

做好这5点,你也能成为算法大神!

5. 调整学习心态

学习最忌心浮气躁,急功近利,即便练习了算法,也不一定代表能万无一失通过笔试面试关,因为算法毕竟是面试考察的一部分,我们同时也得加强项目经验和基础知识的学习。

以上的几个步骤下来,短则半年,长则三年,所以需要做好长期学习的准备。如果想要真正的将算法内化为我们的内功,必须循序渐进、一步步学习,不能急于求成。

这套方法是我多年面试学习的总结,希望能对正在准备算法面试,或者想学习算法的你有所帮助。

关注公众号【码老思】,一时间获取最通俗易懂的原创技术干货。