0.1 前言
0.1 前言
---1. 创作历程
1.1 创作起因
写一本通俗易懂的算法书一直是我的心愿,这个想法已经在我心中埋藏了七年之久。至今我仍记得大学时立下的 flag:要把所学的算法知识系统整理,编写成书,署上自己的名字,并分享给所有热爱算法的朋友们。
然而,毕业后由于工作繁忙,这个计划被一再搁置。直到 2021 年 3 月,在朋友的建议下,我们组建了一个算法学习群,并制定了为期三个月(2021 年 4 月 ~ 6 月)的刷题打卡计划,规定连续两天不刷题就会被移出群。
最初有 39 人参与,不过最终坚持下来的只有 13 人。虽然计划未能全部完成,但这三个月的坚持让我重新找回了学习算法的乐趣,也养成了刷题的习惯。工作之余,我总会习惯性地打开 LeetCode 刷题、写题解,收获满满。
后来,我们又重新组建了算法交流群。群里的伙伴越来越多,大家每天刷题、写题解、讨论思路、交流心得,甚至还一起参加周赛、双周赛,赛后还会分享做题心得。
1.2 输出是最好的学习方法
在刷题和撰写题解的过程中,我逐步整理了算法与数据结构的基础知识,最终汇聚成了这个开源项目。随后,我又学习搭建了电子书网站,方便大家随时在线阅读。
在这个过程中,我深刻体会到一个重要秘诀:「输出」是最有效的学习方式,这正是费曼学习法的真实写照。
只有真正理解了某个概念,才能用简明易懂的语言表达出来,让他人也能明白。如果自己尚未吃透,就很难讲清楚。为此,我大量阅读算法书籍和优质博客,反复思考,直到能够将复杂的内容转化为通俗的文字。
在刷题过程中,许多朋友和群友与我交流算法知识,指出不足,提出建议。这些宝贵的反馈如同专业老师批改作业,不仅帮助我完善内容,也加深了对算法的理解。
就这样,从 2021 年 7 月到 2022 年 7 月,经过一年的坚持,我在 LeetCode 上完成了 1000 多道题目,系统总结了算法与数据结构知识,最终完成了这本 「算法通关手册」。
2. 为什么要学习算法和数据结构
2.1 算法是程序员的底层能力
算法和数据结构 是计算机程序设计的核心理论基础,但在实际开发中,许多程序员往往忽视了它们的重要性。日常工作中,我们更多依赖成熟的框架和封装良好的接口来完成 CRUD 操作,极少需要自己从零实现底层的数据结构和算法。
此外,编程语言和开发框架的迭代速度极快。以前端为例,React 还没完全掌握,Vue 又流行起来了;刚研究完 Vue 2.0,Vue 3.0 又已发布。新技术层出不穷,学习都来不及,很难专门抽出时间去深入研究算法。
不可否认,语言、技术和框架固然重要,但它们背后的计算机算法与理论才是根本。无论技术如何更迭,始终不变的是底层的算法和理论基础,比如:数据结构、算法、编译原理、计算机网络、计算机体系结构 等。掌握这些核心理论,才能灵活应对各种技术变化,深入理解系统设计原理和框架思想,快速上手新技术,并有效提升工作效率。
学习数据结构与算法的关键,在于领悟其思想和精髓,掌握解决实际问题的方法。
2.2 算法是技术面试的必考内容
在互联网行业的技术面试中,算法与数据结构 几乎是所有公司必考的核心内容。许多知名互联网公司倾向于以 LeetCode 等平台上的算法题作为考察标准,要求面试者不仅要分析问题、阐述解题思路,还需要评估算法的时间复杂度和空间复杂度。通过这些题目的考察,面试官能够有效判断候选人解决实际问题的能力和思维深度。
LeetCode 等平台的算法题已成为行业通用标准,许多公司会直接选用或稍作改编作为面试题。系统地练习这些题目,不仅能提升解决实际问题的能力,也能让你在面试中遇到类似问题时更加自信、从容。
学习算法应当循序渐进,从基础数据结构入手,逐步掌握常见的算法思想。每当学习一个新概念,都要通过实际题目加以巩固,长期积累下来,才能建立起完善的算法知识体系。
本书「算法通关手册」旨在帮助读者系统学习算法知识,既包含基础理论讲解,也有大量实战题目分析。通过理论与实践相结合,读者能够真正掌握算法精髓,提升解决问题的能力。无论是备战面试,还是提升编程能力,这本书都将为你带来切实的帮助。