跳至主要內容

算法通关手册(LeetCode)

ITCharge大约 6 分钟

算法通关手册(LeetCode)

关于本书

本书不仅仅只是一本算法题解书,更是一本算法与数据结构基础知识的讲解书。本书易于理解,没有大跨度的思维跳跃,书中使用部分图示、例子来帮助理解。本书先从基础的数据结构和算法开始讲解,再针对不同分类的数据结构和算法,进行具体题目的讲解分析。让读者可以通过「算法基础理论学习」和「编程实战学习」相结合的方式,彻底的掌握算法知识。

本书采用 Python 作为编程语言,要求学习者已有基本 Python 程序设计的知识与经验。

本书起因

我想写一本通俗易懂的算法书已经很久了,久到大概有 6 年那么久。至今我还记着上大学时立下的 flag,我要把我所学的算法知识总结起来,整理成册,编辑成书。然后大大方方的在封面书上自己的昵称,再把它分享给想要学习算法的朋友们看。

结果是万万没想到,这一晃过去,毕业后参加工作都已经 5 年了,每天忙于开发需求、业务逻辑,写书这件事也跟其他大多数的待办事项和计划清单一样,被无限期地闲置一旁,再也不管不顾了。

不过,好在是今年我又重新拾起了算法,开始和朋友一起愉快的在 LeetCode 上刷题。于是往日的目标又浮现在了眼前,所以这次痛下决心,立志写一本浅显易懂、图文并茂的算法书,能够让没有算法基础的新手能够通过这本书学到一些「算法和数据结构」相关知识,并通过在 LeetCode 刷题的方式,锻炼自己的解决问题的能力和思维方式。

源码地址

本书内容及代码都放在 Github repoopen in new window 中,欢迎在下方项目中 「Star ⭐️ 」「Fork」,这是对我最大的鼓励和支持。

本书前言

「算法和数据结构」 是计算机程序设计的重要理论技术基础,但很多程序员忽略了它的重要性。在日常开发工作中,最多的情况是使用成熟的开发框架,利用已经封装好的接口,进行 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+ 道题解前进。

版权说明