LeetCode 101:和你一起你轻松刷题(C++)

LeetCode 101 - A LeetCode Grinding Guide (C++ Version)

I wrote a book named LeetCode 101 - A LeetCode Grinding Guide. It is written in Chinese. If you cannot understand Chinese, you may stop reading now.

这是一本或许适合你的LeetCode刷题指南书

  • 这是一本面向有C++编程基础,但缺乏刷题经验的读者的教科书和工具书(不适合完全的编程小白喔)
  • 这是一本总结了15种常见类型题,50种细分类型题,101道题解的LeetCode刷题指南
  • 这是一本适合你查漏补缺,同时有很多刷题建议的睡前读物
  • 这是一本永久免费,禁止营利性利用的电子书
  • 欢迎您阅读、传阅、在GitHub提出issue

下载地址

思维导图

本书序

在2018年这个奇妙的秋天,我前往美国卡内基梅隆大学攻读硕士项目。为了准备实习秋招,我从夏天就开始整理LeetCode的题目;经过几个月的刷题,我也整理了几百道题,但是缺少系统性的归纳和总结。时隔一年,我于2019年秋季在GitHub上用Markdown做了一个初步的总结,按照算法和数据结构进行分类,整理了差不多200道题,用于自己在面试前查漏补缺。然而,在这个简单的总结里,每道题只有简单的题目描述和题解代码,并没有详细的解释说明。除了我之外的其他人很难读懂代码的思路。

有了刷题的积累和不错的运气,我很快就在毕业前找到了工作。当时我的一位朋友对我开玩笑说,你刷了这么多题,却在找到工作后停止了面试,是不是有点亏啊。我笑了笑,心想我并不是会这么做的人;但是的确,刷了这么多题却没有派上太多用场。2019年冬季毕业后,我宅在家里做着入职前的准备,同时刷着魔兽世界的坐骑成就。不知怎的,我突然萌生了一个念想,既然我刷了这么多题,也有了初步的总结,不如把它们好好地归纳总结一下,做一个便于他人阅读和学习的电子书。Bang! Here comes the book.

本书分为算法和数据结构两大部分,又细分了十五个章节,详细讲解了刷LeetCode时常用的技巧。我把题目精简到了101道,一是呼应了本书的标题,二是不想让读者阅读和练习时间过长。这么做不太好的一点是,如果只练习这101道题,读者可能对算法和数据结构的掌握不够扎实。因此在每一章节的末尾,我都加上了一些推荐的练习题,并给出了一些解法提示,希望读者在理解每一章节后把练习题也完成。如果本书反响热烈,我也会后续加上他们的题解。

本书以C++作为编程语言。对于Java用户,绝大部分的算法和数据结构都可以找到对应的写法,语法上也只需要小修改。对于Python等其它用户,由于语法差别略大,这本书可能并不会特别适合你。由于本书的目的不是学习C++语言,因此行文时我不会过多解释语法细节,而且会适当使用一些C++11或更新的语法。截止于2019年年末,所有的书内代码在LeetCode上都是可以正常运行的,并且在保持易读的基础上,几乎都是最快或最省空间的解法。

请注意,刷题只是提高面试乃至工作能力的一小部分。在计算机科学的海洋里,值得探索的东西太多,并不建议您花过多时间刷题。并且要成为一个优秀的计算机科学家,刷题只是入职的敲门砖,提高各种专业技能、打好专业基础、以及了解最新的专业方向或许更加重要。

由于本书的目的是分享和教学,因此本书永久免费,也禁止任何营利性利用。欢迎学术目的的分享和传阅。由于我不对LeetCode的任何题目拥有版权,一切题目版权以LeetCode官方为准。

感谢GitHub用户CyC2018的LeetCode题解,它对于我早期的整理起到了很大的帮助作用。感谢ElegantBook提供的精美LATEX模版,使得我可以轻松地把Markdown笔记变成看起来更专业的电子书。另外,书的封面图片是我于2019年元月,在尼亚加拉大瀑布的加拿大侧拍摄的风景;在此感谢海澄兄同我一起旅行拍照。