跳到主要内容

LeetCode 101: 力扣刷题指南 (第二版)

作者:高畅 Chang Gao

语言:C++ & Python

版本:正式版 2.0c,最新版见 GitHub changgyhub/leetcode_101

信息

一个面向有一定的编程基础,但缺乏刷题经验的读者的教科书和工具书。

2019 年底,本书第一版在 GitHub 上正式发布,反响十分热烈。过去的五年,作者积累了大量的工作经验,同时也越来越觉得这本书存在很多纰漏和不完善之处。于是在 2024 年底,作者重新整理了本书的内容,发布了第二版。

本书分为算法、数学和数据结构三大部分,包含十五个章节,详细讲解了刷 LeetCode 时常用的技巧。在第一版时,为了强行呼应 "101"(在英文里是入门的意思),作者把题目精简到了 101 道。但现如今面试中可能考察的题型越来越多,所以第二版增加了一些重点题目,方便读者查漏补缺。选题时作者尽量兼顾题目在面试中可能出现的频率、易学性和泛用性。每个章节之后都附带了练习题,作者十分推荐读者在学习完每个章节之后使用这些练习题巩固理解。

本书所有常规题目均附有 C++ 和 Python3 题解。由于本书的目的不是学习 C++ 和 Python 语言,作者在行文时不会过多解释语法细节,而且会适当使用一些新 C++ 标准的语法和 Pythonic code。截止 2024 年底,所有的书内代码在 LeetCode 上都是可以正常运行的,并且在保持易读的基础上,几乎都是最快或最省空间的解法。

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

本书是作者本人于闲余时间完成的,可能会有不少纰漏,部分题目的解释可能也存在不详细或者不清楚的情况。欢迎在 GitHub 提 issue 指正,作者会将您加入鸣谢名单(见后记)。另外,如果您有任何建议和咨询,欢迎前往作者的个人网站联系作者。如果需要私信,请通过邮箱或领英发送消息,作者会尽快回复。

感谢 GitHub 用户 CyC2018 的 LeetCode 题解,它对于作者早期的整理起到了很大的帮助作用。感谢 ElegantBook 提供的精美 LATEX 模版,使得作者可以轻松地把笔记变成看起来更专业的电子书。另外,第二版书的封面图片是作者于 2024 年 7 月,在旧金山金门大桥北的 Sausalito 小镇海边拍摄。当时还买了一筒三球超大份冰淇淋,可惜实在是太甜了,吃了几口实在是吃不下去,只能扔掉。

如果您觉得这本书对您有帮助,不妨打赏一下作者哟!

重要声明

本书 GitHub 地址:github.com/changgyhub/leetcode_101

由于本书的目的是分享和教学,本书永久免费,也禁止任何营利性利用。欢迎以学术为目的的分享和传阅。由于作者不对 LeetCode 的任何题目拥有版权,一切题目版权以 LeetCode 官方为准,且本书不会展示 LeetCode 付费会员专享题目的内容或相关代码。

简介

打开 LeetCode 网站,如果我们按照题目类型数量分类,最多的几个题型包括数组、动态规划、数学、字符串、树、哈希表、深度优先搜索、二分查找、贪心算法、广度优先搜索、双指针等等。本书将包括上述题型以及网站上绝大多数流行的题型,在按照类型进行分类的同时,也按 照难易程度进行由浅入深的讲解。

第一个大分类是算法。本书先从最简单的贪心算法讲起,然后逐渐进阶到双指针、二分查找、排序算法和搜索算法,最后是难度比较高的动态规划和分治算法。

第二个大分类是数学,包括偏向纯数学的数学问题,和偏向计算机知识的位运算问题。这类问题通常用来测试你是否聪敏,实际工作中并不常用,笔者建议可以优先把精力放在其它大类。

第三个大分类是数据结构,包括 C++ STL、Python3 自带的数据结构、字符串处理、链表、树和图。其中,链表、树、和图都是用指针表示的数据结构,且前者是后者的子集。最后我们也将介绍一些更加复杂的数据结构,比如经典的并查集和 LRU。