新书出版已经有一段时间了,也陆续收到了一些读者的反馈。今天咱就回答一些读者常见的问题以及《算法通关之路》一些内容剧透。
其实出版后已经有不少读者看完了并且给了非常优质的读后感。下面我挑选几个章节的优质留言给大家。
读者留言
第 6 章二分法,虽然二分法是一个比较经典的算法,但对于大部分人一直是个头痛的问题。我每次刷 LeetCode 的时候,常常看不出来要使用二分法,或者知道要用二分法,但花了很长的时间在调试二分法的边界问题。通过学习此章很大程度上解决了我的烦恼,让我对二分法有了全方面的了解。它从二分法的经典问题开始讲起,再到后面的二分法的变种问题。其中详细介绍了什么时候用二分法,以及编写二分法的过程中所需要注意的边界问题。如果你也对二分法感到烦恼,十分推荐你阅读它,相信可以从这一章节学习到二分法的精髓。
第 7 章位运算,与很多经典算法相比位运算的算法普适性并不高,很多程序员对此并不熟悉,这一章节由一位音视频架构师主笔,音视频的处理里,充斥着大量对二进制数据的处理。听他的说法,每次看到位运算的问题,都有亲切的感觉,让人忍不住想看一看他的见解。人们习惯了使用十进制的计算规则,但如果能够有二进制的思维,能够将数据二进制话,然后运用位运算进行处理,一定能打开新的思路。
非常喜欢第 8 章设计这一章节,让我更深入的了解了高级数据结构的设计。从我入行开始,在经历的面试当中,算法(algos)和系统设计(system design) 基本是必考的两个方向,尤其是在面北美、欧洲的公司的时候。而且这两年发现,国内的巨头也开始使用算法题和系统设计题来作为面试的内容。对于要做“卷中王者”的我们来讲,这是必须要掌握的知识。这一章由浅入深地讲解了常见的几种高级数据结构。个人尤其喜欢对于 LRU、LFU 和 跳表的讲解,一步步让你去了解设计的缘由和取舍。其中的每个知识点,既可以出在算法的面试题里面,也可以作为 system design 的基础考点。另外值得一说的是,这一章节的时间复杂度的推理非常缜密,并且在延展部分给出了相关领域的论文。总而言之,很值得一看。
双指针和滑动窗口在 LeetCode 中是两个 tag,但本质上可以将滑动窗口看做双指针的特殊应用。本质上,可以将双指针看做对数组、链表、字符串的两个索引,依照这个思路,甚至可以出现多个索引的情况。而滑动窗口是利用两个索引,来完成两索引内的一系列操作。考虑到窗口的大小是否固定、窗口的起始位置等,可以对这类问题进行很多优化。本书的这两节,也都给出了不同的解题思路。非常推荐研究一下里面的题目。
说说公认最难的动态规划题目,这本书中不仅有专门的章节带你循序渐进的学习,还通过游戏、博弈和股票系列专题带你巩固基础,触类旁通。一直懵懵懂懂关于动态规划与其他几种算法思想的异同和关联,通过读完此书获得了不少答案。
在刷 leetcode 当中,以 分治法 作为 tag 的题目并不多,并且总和 dp、dfs 等算法知识混起来,增加理解难度。非常喜欢这本书对于分治的讲解,尤其是开头总结了在笔试、面试中可能面临的大部分分治类型题目,替我省了很多的精力。比如对于“合并 k 个排序列表”的题目,一步步从暴力法到最优解法,学习坡度变得平缓,而不是难度的陡增,非常推荐一观。
贪心法是一个最让我摸不着头脑的算法,每道题的题解都相差较大,很难找到一个共性的东西。
第十五章讲解了很多常见的贪心策略,例如问题拆解,限制条件等等,这些贪心策略让我面对贪心题目有了更加清晰的思路,以及更多的选择方向。此外,章节末尾还有对解题技巧的总结,这些技巧比较精炼,启发了我以后如何提高贪心题目的解题能力,非常贴心,推荐大家好好阅读这一章节。相比于其它算法,回溯法的算法思想比较固定,但怎么理解回溯法,快速应用回溯法是一个较大的难点。第十六章开篇就详细介绍了回溯法的解题模板,并在一道经典的组合问题上应用,让我对回溯法有了很直观的理解。同时,后文还讲解了不同背景下回溯法的应用题目,在提高应用模板能力的同时,学习到各种场景下的回溯技巧,相信能够在以后更加灵活地应用回溯模板,推荐大家阅读。
第十八章是我比较喜欢的一个章节,它总结了常见的解题模板,帮助我快速地学习各种套路,加深解题模板的理解。这些解题模板可以作为复习的材料,在面试或者笔试前重新理顺套路题目的思路。同时,解题模板来自于前面章节的内容,个人认为可以遮住代码,尝试根据套路背景自己编写代码,以此检验前面内容是否掌握。
非常感谢大家的认可,也希望大家拿到自己满意的 offer!
最后来回答几个读者感兴趣的问题。
1. 需要按照顺序看么?
完全不需要。实际上,我也非常建议大家跳着看。优先看自己正在学习的内容。
比如你正在学习动态规划,可以直接看动态规划章节,股票章节以及游戏章节。比如你对复杂度分析不太懂就可以先看第一章。
我做了一个”脑图“给大家快速预览书的主要内容。如果大家实在不知道阅读顺序,推荐用这个脑图中的顺序从上到下看。
2. 我已经看了你的 Github 了,还需要这本书么?
不管你是看了我的 Github(地址:https://github.com/azl397985856/leetcode),还是参加了我的 《91 天学算法》活动。我都强烈建议你购买一本。
原因有三:
- 虽然知识点还是那么多,几乎没有新增知识点。但是相同的主题,书的讲述方式和风格完全不同。书内容更加严谨,搭配 Github 和《91 天学算法》讲义进行学习效果更好。
比如书中二分章节中《153. 寻找旋转排序数组中的最小值》,这道题是一个很简单的二分。但是在证明复杂度的时候就使用了两种方法来证明。
这种严谨的态度贯穿整本书。通常来说,复杂的时间复杂度我也会给出分析,而不是直接贴出一个答案给大家。虽然不一定会像这个二分一样给出多种证明方式,但是也力求完整和准确。
简单来说,这本书在很大程度上都是和 Github 以及我的其他算法资料的补充,具体内容需要大家可以买到书后自己翻翻来体会啦。
很多题目由于我在书中做了讲解,因此就没有公开到 Github 等资料。因此如果你想看这些题目的题解就要通过书来看。
书的代码比较全。很多同学反馈想增加 xx 语言,但是确实没有太多精力增加语言。但是我给这本书所有的题目都增加了三种主流语言的代码,包括 Python,CPP 和 Java,另外部分题目也提供了 JS 版本。
最后强烈建议大家搭配《算法通关之路》来学习,尤其是那些参加《91 天学算法》的同学。
哦,对了!《91 天学算法》每个月都会在坚持每天打卡的人中抽取 3 人免费获取我们的《算法通关之路》!
《如何参加 91 天学算法(第五期)?》 https://lucifer.ren/blog/2021/08/21/91algo-5/
3. 有试读版么?
有的。https://leetcode-solution.cn/book-intro
这里有:
- amazon 官方提供的复杂度分析的部分试读
- 西法提供的设计章节的部分试读。
大家赶紧点 ta,感受书的全面和严谨吧~ (_^▽^_)
4. 有购书活动吗?
西法打算增加一个活动。
规则是凡在活动期间购买《算法通关之路》并好评的同学截图给我,验证后可以免费参加当前一期《91 天学算法》。
注意只能免费参加购书时间当前一期哦,比如你是在第五期之后第六期结束前购买的,那就只能免费参加第六期的。
不过由于这一期已经开始了,现在搞这个活动会损害一部分已经参加了 91 活动并且买了我的书的朋友,因此西法打算下期再开启这个活动。
下期什么时候?大约在冬季(12 月份)
勘误
首先,一些读者很热心地给我反应印刷错误。比如复杂度分析部分单调栈的代码是错误的,少个部分代码,应该是印刷问题,之前校验 word 的时候没有这个问题。大家可以访问官方网站的配套代码查看正确的代码。
官方网站地址:https://leetcode-solution.cn/book
如果大家发现其他问题也可以反馈到我这里,或者直接在读者交流群众反馈。