@ -4,21 +4,35 @@ comments: true
# 关于本书
在 2018 年 10 月发生了 一件事,成为了我职业生涯的重要转折点。当时的我在交大读研,对互联网求职一无所知,但仍然硬着头皮申请了 Microsoft 的软件工程师实习。在二面中,面试官让我在白板上写出 “快速排序” 代码,我摇了摇头,畏畏缩缩地写了一个 “冒泡排序” ,并且还写错了。从面试官的表情上,我看到了一个大大的 Game Over 。
五年前发生的 一件事,成为了我职业生涯的重要转折点。当时的我在交大读研,对互联网求职一无所知,但仍然硬着头皮申请了 Microsoft 的软件工程师实习。在二面中,面试官让我在白板上写出 “快速排序” 代码,我摇了摇头,畏畏缩缩地写了一个 “冒泡排序” ,并且还写错了` (ToT) ` 。从面试官的表情上,我看到了一个大大的 GG 。
从那次失利开始,找工作的压力就倒逼我开始刷算法题。我采用 “扫雷游戏” 式的学习方法,两眼一抹黑刷题,扫到不会的 “雷” 就通过查资料把它解决掉,配合周期性的总结,逐渐形成了数据结构与算法的知识图景。幸运地,我在 2020 年 秋招斩获了多家大厂的 Offer 。
从那次失利开始,找工作的压力就倒逼我开始刷算法题。我采用 “扫雷游戏” 式的学习方法,两眼一抹黑刷题,扫到不会的 “雷” 就通过查资料把它解决掉,配合周期性的总结,逐渐形成了数据结构与算法的知识图景。幸运地,我在秋招斩获了多家大厂的 Offer 。
之后, 分享题解成为了我的爱好。经常刷题的同学可能遇见过一个顶着路飞笑脸头像, 名为「Krahets」的力扣 ID , 那便是我。截至目前, 我已在力扣( LeetCode) 上分享了近 100 道题目解析,累积了 1700 万阅读量,回复了数千条读者的评论和问题,并编写了 LeetBook《图解算法数据结构》, 已免费售出 21 万多本。
回想自己当初在 “扫雷式” 刷题中被炸的满头包的痛苦,我意识到有 一本 “刷题前必看” 的读物可以使算法小白少走许多弯路,而这正与我的擅长点契合。强烈的写作意愿席卷而来,那就来 吧:
回想自己当初在 “扫雷式” 刷题中被炸的满头包的痛苦,我意识到一本 “刷题前必看” 的读物可以使算法小白少走许多弯路,而这正与我的擅长点契合。强烈的写作意愿袭来,那就动笔 吧:
< h4 style = "text-align:center" > Hello, 算法! < / h4 >
## 读者对象
- 数据结构与算法零基础的同学,但需具备 Java, C++, Python 任一语言的编程基础
- 具有一定算法刷题基础,想要系统地学习或复习数据结构与算法的同学
- 本书以代码实践为导向,尤其适合在职或即将成为工程师(程序员)的同学
!!! success "前置条件"
作为一本入门手册,本书主要面向算法零基础或初学的同学。但你需要至少具备 Java, C++, Python 任一语言的编程基础,能够阅读和编写简单代码。
如果您是「算法初学者」,完全没有接触过算法,或者已经有少量刷题,对各种数据结构与算法有着朦胧的理解,在会与不会之间反复横跳,那么这本书就是为你而写!本书能够为你带来:
- 了解刷题所需的「数据结构」,包括常用操作、优势和劣势、典型应用、实现方法等。
- 学习各类「算法」,介绍算法的设计思想、运行效率、前置条件、优势劣势、实现方法等。
- 可一键运行的「配套代码」,包含详细注释,使你通过编程实践来加深对理论知识的理解。
如果您是「算法熟练工」,已经积累一定刷题量,接触过大多数题型,那么本书内容对你来说可能稍显基础,但仍能够带来以下价值:
- 本书篇幅不长,如果你想提纲挈领地快速回顾算法知识,那么相信本书是一个不错的选择。
- 书中有许多算法总结和对比类的知识,这些内容可以帮助你梳理算法知识体系。
- 本书 GitHub 仓库提供可运行、高质量的源代码,实现了各种经典数据结构和算法,你可以把它们当作 “工具库” 来使用。
如果您是「算法大佬」,请受我膜拜!这本书对您用处不大,但希望您可以抽时间对本书提出意见建议,帮助各位同学获取更好的学习内容,感谢!
!!! quote ""
@ -55,25 +69,25 @@ comments: true
介绍了常见的算法类型,包括查找算法、排序算法、搜索与回溯算法、动态规划、分治算法等,主要关心以下内容:
- 基本定义:算法的设计思想;
- 主要特点:使用前置要求 、优势和劣势;
- 主要特点:使用前置条件 、优势和劣势;
- 算法效率:最差和平均时间复杂度、空间复杂度;
- 应用场景:结合例题讲述算法应用;
## 配套代码
完整可运行的代码在 GitHub 仓库 [![github-stars ](https://img.shields.io/github/stars/krahets/hello-algo?style=social )](https://github.com/krahets/hello-algo) ,你可以使用 Git 将仓库 Clone 至本地,也可以下载仓库压缩包使用。
编程环境部署和代码使用方法请见下章 “编程环境安装” 和 “算法学习建议” 。
完整可运行的代码放在 [<u>GitHub 仓库</u> ](https://github.com/krahets/hello-algo ) ,编程环境部署和代码使用方法请见下章「编程环境安装」和「如何使用本书」。
## 风格约定
- 文章中的重要名词会用「」符号标注,例如「数组 Array」。这类名词应该被牢记,英文翻译也建议记住,以便后续查阅资料时使用 。
- 文章中的重要名词会用「」符号标注,例如「数组 Array」,这类名词(包括中文和英文)应该被牢记,以便后续查阅资料时使用,名词混淆会导致不必要的歧义 。
- 重点内容、总起句、总结句会被 ** 加粗** ,此类文字值得更多关注。
- 专有名词和有特指含义的词句会使用 “ ” 标注,以避免歧义。
- 标题后标注 * 符号的是选读章节,如果你的时间有限,可以先跳过这些章节。
## 本书特点
??? info "写得啰嗦,可以跳过"
** 以实践为主。** 我们知道,学习英语期间光啃书本是远远不够的,需要多听、多说、多写,在实践中培养语感、积累经验。编程语言也是一门语言,因此学习方法也应是类似的,需要多看优秀代码、多敲键盘、多思考代码逻辑。
本书的理论部分占少量篇幅,主要分为两类:一是基础且必要的概念知识,以培养读者对于算法的感性认识;二是重要的分类、对比或总结,这是为了帮助你站在更高视角俯瞰各个知识点,形成连点成面的效果。