2

《算法通关之路》邀请你来试读

 2 years ago
source link: https://segmentfault.com/a/1190000040860440
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

《算法通关之路》邀请你来试读

新书出版已经有一段时间了,也陆续收到了一些读者的反馈。今天咱就回答一些读者常见的问题以及《算法通关之路》一些内容剧透。

其实出版后已经有不少读者看完了并且给了非常优质的读后感。下面我挑选几个章节的优质留言给大家。

  • 第 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/azl3979858...),还是参加了我的 《91 天学算法》活动。我都强烈建议你购买一本。

原因有三:

  1. 虽然知识点还是那么多,几乎没有新增知识点。但是相同的主题,书的讲述方式和风格完全不同。书内容更加严谨,搭配 Github 和《91 天学算法》讲义进行学习效果更好。

比如书中二分章节中《153. 寻找旋转排序数组中的最小值》,这道题是一个很简单的二分。但是在证明复杂度的时候就使用了两种方法来证明。

这种严谨的态度贯穿整本书。通常来说,复杂的时间复杂度我也会给出分析,而不是直接贴出一个答案给大家。虽然不一定会像这个二分一样给出多种证明方式,但是也力求完整和准确。

简单来说,这本书在很大程度上都是和 Github 以及我的其他算法资料的补充,具体内容需要大家可以买到书后自己翻翻来体会啦。

  1. 很多题目由于我在书中做了讲解,因此就没有公开到 Github 等资料。因此如果你想看这些题目的题解就要通过书来看。
  2. 书的代码比较全。很多同学反馈想增加 xx 语言,但是确实没有太多精力增加语言。但是我给这本书所有的题目都增加了三种主流语言的代码,包括 Python,CPP 和 Java,另外部分题目也提供了 JS 版本。

最后强烈建议大家搭配《算法通关之路》来学习,尤其是那些参加《91 天学算法》的同学。

哦,对了!《91 天学算法》每个月都会在坚持每天打卡的人中抽取 3 人免费获取我们的《算法通关之路》!

《如何参加 91 天学算法(第五期)?》 https://lucifer.ren/blog/2021...

3. 有试读版么?

有的。https://leetcode-solution.cn/...

  • amazon 官方提供的复杂度分析的部分试读
  • 西法提供的设计章节的部分试读。

大家赶紧点 ta,感受书的全面和严谨吧~ (_^▽^_)

4. 有购书活动吗?

西法打算增加一个活动。

规则是凡在活动期间购买《算法通关之路》并好评的同学截图给我,验证后可以免费参加当前一期《91 天学算法》

注意只能免费参加购书时间当前一期哦,比如你是在第五期之后第六期结束前购买的,那就只能免费参加第六期的。

不过由于这一期已经开始了,现在搞这个活动会损害一部分已经参加了 91 活动并且买了我的书的朋友,因此西法打算下期再开启这个活动。

下期什么时候?大约在冬季(12 月份)

首先,一些读者很热心地给我反应印刷错误。比如复杂度分析部分单调栈的代码是错误的,少个部分代码,应该是印刷问题,之前校验 word 的时候没有这个问题。大家可以访问官方网站的配套代码查看正确的代码。

官方网站地址:https://leetcode-solution.cn/...

如果大家发现其他问题也可以反馈到我这里,或者直接在读者交流群众反馈。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK