算法通关手册(LeetCode)
算法通关手册(LeetCode)
关于本书
本书不仅仅只是一本算法题解书,更是一本算法与数据结构基础知识的讲解书。本书易于理解,没有大跨度的思维跳跃,书中使用部分图示、例子来帮助理解。本书先从基础的数据结构和算法开始讲解,再针对不同分类的数据结构和算法,进行具体题目的讲解分析。让读者可以通过「算法基础理论学习」和「编程实战学习」相结合的方式,彻底的掌握算法知识。
本书采用 Python 作为编程语言,要求学习者已有基本 Python 程序设计的知识与经验。
本书起因
我想写一本通俗易懂的算法书已经很久了,久到大概有 6 年那么久。至今我还记着上大学时立下的 flag,我要把我所学的算法知识总结起来,整理成册,编辑成书。然后大大方方的在封面书上自己的昵称,再把它分享给想要学习算法的朋友们看。
结果是万万没想到,这一晃过去,毕业后参加工作都已经 5 年了,每天忙于开发需求、业务逻辑,写书这件事也跟其他大多数的待办事项和计划清单一样,被无限期地闲置一旁,再也不管不顾了。
不过,好在是今年我又重新拾起了算法,开始和朋友一起愉快的在 LeetCode 上刷题。于是往日的目标又浮现在了眼前,所以这次痛下决心,立志写一本浅显易懂、图文并茂的算法书,能够让没有算法基础的新手能够通过这本书学到一些「算法和数据结构」相关知识,并通过在 LeetCode 刷题的方式,锻炼自己的解决问题的能力和思维方式。
源码地址
本书内容及代码都放在 Github repo 中,欢迎在下方项目中 「Star ⭐️ 」 和 「Fork」,这是对我最大的鼓励和支持。
- Github 地址:https://github.com/itcharge/LeetCode-Py
本书前言
「算法和数据结构」 是计算机程序设计的重要理论技术基础,但很多程序员忽略了它的重要性。在日常开发工作中,最多的情况是使用成熟的开发框架,利用已经封装好的接口,进行 CRUD(增删改查)操作,似乎很少会需要自己实现相应的数据结构和算法。
况且工作中用到的编程语言、开发框架、开发平台,更新速度堪比摩尔定律。以前端为例,React 还没学明白呢,Vue 就火起来了。Vue 2.0 的文档还在研究呢,Vue 3.0 就发布了。很多时候,连新的技术还学不过来呢,哪还有时间去专门研究算法和数据结构呢。
诚然,语言、技术、框架固然重要,但背后的计算机算法和理论更为重要。因为语言、技术、框架的更新日新月异,但万变不离其宗的是背后的算法和理论,例如:数据结构、算法、编译原理、计算机网络、计算机体系结构 等等。任凭新技术如何变化,只要掌握了这些计算机科学的核心理论,就可以见招拆招,让自己立于不败之地。从此无论是看懂底层系统的设计原理、框架背后的设计思想,还是学习新技术、提升工作实战的效率,都可以做到得心应手。
学习数据结构与算法的关键,在于掌握其中的思想和精髓,学会解决实际问题的方法。
本书采用算法与数据结构相结合的方法,把内容分为如下 6 部分:
- 第一部分是序言(第 00 章):介绍数据结构与算法的基础知识、算法复杂度、LeetCode 的入门和攻略,为后面的学习打好基础。
- 第二部分是数据结构篇(第 01 ~ 08 章):每一章对应一种数据结构,这个部分用来介绍最常见、最重要的数据结构,以及与该数据结构相关的算法知识。
- 第三部分是基础算法篇(第 09 章):这一章用来介绍基本的算法思想。包括枚举、递归、贪心、分治、回溯以及位运算。
- 第四部分是动态规划篇(第 10 章):这一章用来介绍动态规划的基础知识、题型和优化方法。
- 第五部分是补充内容篇(第 11 章):这一章用来补充之前章节没有讲到的内容。
- 第六部分是 LeetCode 题解篇(第 12 章):这一章用来讲解我在 LeetCode 上刷过的所有题目。可按照对应题号进行检索和学习。
在本书构思与写作阶段,很多朋友给我提出了有益的意见和建议。这些意见和建议令我受益匪浅。感谢在本书著作准备过程中,帮助过我的朋友,以及一起陪我刷题打卡的朋友,还有提供宝贵意见的读者。感谢为本书提供课程合作和宣传的 DataWhale 开源组织。谢谢诸位。
目标读者
- 拥有 Python 编程基础的编程爱好者
- 对 LeetCode 刷题感兴趣的编程爱好者
- 对算法感兴趣的计算机专业学生或程序员
使用说明
- 本电子书的左侧为所有章节目录导航,可直接点击对应章节跳转阅读。
- 本电子书左上角有搜索栏,可以帮你迅速找到想看的章节和题解文章。
- 本电子书每页都接入了 Utterances 评论系统,可在每页下方的评论框进行评论(需使用 GitHub 账号登录)。如果没有显示,请检查一下网络。
互助与勘误
限于本人的水平和经验,书中一定不乏纰漏和谬误之处。恳切希望读者给予批评指正。这将有利于我改进和提高,以帮助更多的读者。如果您对本书有任何评论和建议,或者遇到问题需要帮助,可在每页评论区留言,或者致信作者邮箱 i@itcharge.cn,我将不胜感激。
关于作者
我是一名 iOS / macOS 的开发程序员,另外也是北航软院的一名非全硕士(在读)。曾在大学期间学习过算法知识,并参加过 3 年的 ACM 比赛, 但水平有限,未能取得理想成绩。但是这 3 年的 ACM 经历,给我最大的收获是锻炼了自己的逻辑思维和解决实际问题的能力,这种能力为我今后的工作、学习打下了坚实的基础。
我从 2021 年 03 月 30 日开始每日在 LeetCode 刷题,到 2022 年 06 月 08 日已经刷了 1000+ 道题目,并且完成了 800+ 道题解。努力向着 1000+、1500+、2000+ 道题解前进。
版权说明
- 本书采用 知识署名—非商业性使用—禁止演绎(BY-NC-ND)4.0 协议国际许可协议 进行许可。
- 本书题解中的所有题目版权均归 LeetCode 和 力扣中国 所有。