算法通关之路
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

前言

作为计算机科学永恒的主题之一,数据结构和算法被誉为程序的灵魂,对其掌握程度往往是衡量一个软件工程师内功的标准。但驾驭数据结构和算法并非易事,除了反复阅读理论知识,借助算法题目进行训练也是学习的必经之路。

1.本书的特点

本书围绕“做最好的力扣(LeetCode)题解”的指导思想,对力扣(LeetCode)中的经典题目及背后的知识体系进行系统的梳理,依次展开讲解,由浅入深,力求全书内容系统而扼要,分析过程条理清晰,代码实现易读、易学。本书总计20章内容,在深入剖析近百道经典算法题目的过程中,带领读者理解算法知识、总结解题“套路”、掌握通关技巧。希望读者可以通过阅读本书并动手练习,让知识和技能得到质的提升。

作为专门针对力扣(LeetCode)题目的题解书,本书对数据结构和算法知识的讲解存在一定的局限性:为了不影响阅读的流畅性,不得不舍弃过于详细的解释证明,对部分知识点的讲解进行精简压缩,力求让内容通俗易懂。我们希望帮助读者奠定数据结构和算法知识的基础,指明方向。在本书的基础上,期望对算法理论进行深入学习的读者可以通过诸如《算法》等工具书,继续探索算法的奥妙。我们也会在第1章详细阐述学习路线。

2.读者对象

本书适用于如下类型的读者对象。

● 你正在学习数据结构和算法,希望边学边实践知识。

● 你没有刷过题,但具备一定的数据结构和算法的基础知识。

● 你刚开始刷题,希望极大地提升自己的学习效率。

● 你在刷题过程中遇到瓶颈,希望得到指引。

● 算法爱好者,希望了解更多不一样的思路。

对于完全没有接触过数据结构和算法的读者,作者强烈建议你先学习一下基础知识,比如数组、链表、二叉树,以及基础的排序、递归算法,等等。这个过程不需要很长时间,用几天时间了解一下即可。尽管越深入的理论学习对解题的帮助越大,但它们两者的关系是相辅相成的,解题对于巩固理论知识也会很有帮助,千万不要等到认为理论都完全掌握了才开始练习。

3.内容介绍

作为一本追求覆盖尽量多经典场景、经典问题的算法题解书,制定一种完美的题目编排顺序几乎是不可能的,不同的题目和不同的解题思路构成了网状的联系,很难做出取舍,因此,本书根据题目场景、算法思想、解题“套路”等主要特点将近百道算法题分散在了20章内容之中,它们并没有按照特定的顺序进行编排,读者可以根据自己的兴趣来挑选阅读。对于希望由易到难、循序渐进进行阅读的读者来说,下面的介绍可以作为一个阅读参考。

本书的20章内容总体可以被分为四大类别。

第一类是算法基础知识,包括第1章预备知识、第2章数学之美,旨在进行知识铺垫,解答一些读者关注较多的问题。

第二类是算法思想和算法技巧,这是涉及内容最多的一个类别。第6章二分法和第14章分治法可以被看作对分治思想的实践;第9章双指针和第11章滑动窗口主要讲解了使用指针的技巧;第7章位运算旨在引导读者从二进制的角度思考问题;还有一些非常经典的算法思想,由易到难来看,包括第15章贪心法、第5章深度优先遍历和广度优先遍历、第16章回溯法、第10章动态规划。

第三类是经典算法问题,这些题目可能与某种具体的算法无关,但这些解题场景可以帮助读者在解答类似题目时拓展思路。其主要包括第3章回文的艺术、第4章游戏之乐、第8章设计、第12章博弈问题、第13章股票问题和第17章一些有趣的题目。

最后一类是解题“套路”,顾名思义,这一类内容为读者总结了不少解题的模板和“套路”,包括第18章一些通用解题模板、第19章融会贯通、第20章解题技巧和面试技巧。

4.配套资源

本书中的源码使用Python语言编写,但为了方便读者学习、参考,书中每一段代码都给出了多种语言的实现,请通过本书的官方网站leetcode-solution(cn域名)访问查看,目前已涵盖Java语言、Python语言和C++语言相关的版本,我们会根据读者的反馈增加更多具体实现。

本书也提供了读者交流群,读者之间及读者和作者之间能够在这里进行有意义的交流,获得远超图书内容本身的学习体验。本书还在相应位置提供了参考链接以方便读者更好地了解书中提到的相关技术。

请在本书封底的“读者服务”处获取官方网站的地址、读者交流群二维码及相关参考链接。

5.本书的约定

本书使用不同的字体区分代码和一般正文内容,对重要的概念会进行加粗。

本书章节之间并没有逻辑上的先后顺序,读者可以根据自己的实际情况进行选择阅读。对于知识间有依赖关系的章节,我们会在具体位置给出指引,便于读者查阅其他相关章节的内容。每一章会尽量使用本章所要论述的算法来解题,但这也导致针对部分题目给出的解法有可能并不是最优的,这一点需要特别注意。

除个别证明过程较为复杂的解法没有进行说明外,大多数题目会有复杂度说明,另外,提交可能会超时的题解会在标题上注明。

6.写在最后

为了让读者深入理解基本知识,掌握基本技能,在撰写本书的过程中,每一道题解都经过多位作者和审阅者的把关,他们不仅在专业性方面下足了功夫,更是从读者的角度反复揣摩。希望本书对读者的学习有所帮助,成为读者掌握数据结构和算法知识的奠基石、解题过程中的助推器。能够帮助读者解决学习和工作中遇到的问题,将是作者的荣幸。由于作者能力有限,本书难免存在不足之处,希望读者不吝赐教。

另外,推荐关注作者lucifer创办的公众号“力扣加加”,如果想突击学习算法,可以参加公众号上的“91天学算法”活动(在公众号中回复关键字“91”进行查看)。

7.致谢

为本书做出直接贡献的人很多,除几位作者外,还要感谢侯佳琳、李荣新、樊恒岩和王一村的耐心审阅。没有你们,就没有本书的出版。

感谢本书的编辑,你每次审稿都非常耐心,让我们一点点看到了出版的希望。

最后,感谢我们的家人,没有你们的支持,我们可能无法坚持下来。

读者服务

微信扫码回复:41278

·获取本书代码资源。

·加入本书读者交流群,与本书作者互动。

·获取【百场业界大咖直播合集】(持续更新),仅需1元。