1.1 如何学习数据结构与算法
1.1 如何学习数据结构与算法
首先我们来明确一下数据结构与算法的定义。
从广义上讲,数据结构就是指一组数据的存储结构,算法就是操作数据的一组方法。
从狭义上讲,也就是本书要讲的,是指某些经典的数据结构和算法,比如队列、栈、堆、二分查找、动态规划等。这些都是前人从实际操作场景中抽象出来的,经过非常多的求证和检验,可以高效地帮助我们解决实际的开发问题。
「算法工程师」做的「算法」,和「数据结构与算法」中的「算法」完全是两码事。
对前者来说,重点在数学建模和调参经验,计算机只是拿来做计算的工具而已;而后者的重点是计算机思维,需要你能够站在计算机的视角,抽象、化简实际问题,然后用合理的数据结构去解决问题。
如何学习
数据结构与算法涵盖的内容很多,要如何高效地系统性学习呢?
你并不需要掌握图里面的所有知识点。很多高级的数据结构与算法,比如二分图、最大流等,在我们平常的开发中很少会用到。
我总结了 20 个最常用、最基础的数据结构与算法,不管是应付面试还是工作需要,只要集中精力逐一攻克这 20 个知识点就足够了。
数据结构与算法
我对每个知识点都做了精讲,并配有对应的 LeetCode 题目,可以帮你打下扎实的基础,形成自己的知识体系。
想要对数据结构和算法有更全面的认识,可以查看这张思维导图,里面几乎涵盖了所有数据结构和算法书籍中都会讲到的知识点。
如何刷题
LeetCode 题目虽然多,但如果分类别来看,其实也没多少,很多题目都是类似的套路和延伸。
对于计算机基础不扎实的同学,如果按照高频顺序刷题,通过每道题反向获取知识,这样的方法不是不可以,但效率可能不高,还会造成知识零散化,不能融会贯通。
建议采用“分类知识学习 + 核心题目 + 反复训练 + 融会贯通”的系统性学习方法。
我整理了 面试必刷 150 题 和 面试高频 200 题,建议先从这些题入手,分类别练习,点击标题可以跳转到 LeetCode 对应答题页面,点击题解(JS)可以查看我的答题思路和代码,遇到不熟悉的知识点可以去对应的知识点精讲学习。
掌握了这十几种常见算法类型的基本原理和思路,就对数据结构与算法有了一个大体的了解,即便出现很多新题,大多也能用现有知识体系去化解。
对算法模板、数据结构形成初步的认识之后,可以再结合 CodeTop 热题排行榜、海外兔热题排行榜、热门企业题库、 LeetCode 题解 多加练习,逐渐提升自己对答题思路的掌握,和对内在原理的领悟。
电影《师父》里面有一句话:「每日挥刀五百下,这个数管住了我。」
成功往往来自于,把简单、正确的事情重复做,不相信也不追求快速而一劳永逸的必胜之法。
想要通关 LeetCode,没有什么神奇的方法,最重要还是自己动手刷题。
多花时间思考怎么 AC 手上的题目,少花时间幻想走了多少进度条。