怎样系统地学习算法( 五 )


5、查找二分查找算法详解
一网打尽!二分查找解题模版与题型全面解析
面试官,我会写二分查找法!对,没有bug的那种!
6、字符串匹配动画:BM算法中的坏字符规则与好后缀规则
动画:七分钟理解什么是KMP算法
动画:什么是BF算法?
动态规划之KMP算法详解(配代码版)
7、线性表如何高效对有序数组/链表去重?
超详细!详解一道高频算法题:数组中的第K个最大元素
一道简单的数组遍历题,加上四个条件后感觉无从下手
数组特性的妙用!如何找到「缺失的第一个正数」
剑指offer第一题:二维数组中的查找
动画:什么是单调栈?
在数据结构中穿针引线:链表实现栈和队列
从简单的线性数据结构开始:栈与队列
五分钟学算法小知识:用栈实现队列/用队列实现栈
几道和「堆栈、队列」有关的面试算法题
超详细!图解「合并K个排序链表」
动画:面试如何轻松手写链表?
LeetCode上最难的链表算法题,没有之一!
链表算法面试问题?看我就够了!
看动画轻松理解「链表」实现「LRU缓存淘汰算法」
从简单的线性数据结构开始:穿针引线的链表(一)
在数据结构中穿针引线:链表实现栈和队列
8、散列表五分钟速读:什么是散列表(哈希表)?
什么是哈希洪水攻击(Hash-FloodingAttack)?
几道和散列(哈希)表有关的面试题
如何判断一个元素在亿级数据中是否存在?
9、树面试前准备:二叉树高频面试题和答案
懵逼树上懵逼果:学习二分搜索树
LeetCode二叉树问题小总结
从简单二叉树问题重新来看深度优先搜索
几道和「二叉树」有关的算法面试题
详解什么是平衡二叉树(AVL)(修订补充版)
【面试现场】为什么MySQL数据库要用B+树存储索引?
字典树概念与题型解析
面试官:为什么MySQL的索引要使用B+树,而不是其它树?比如B树?
心里没点B树。。。
数据结构与算法——最小生成树
植树节,程序猿种的那些树
数据结构与算法——2-3-4树
数据结构与算法——2-3树
看动画轻松理解「Trie树」
10、图浅谈什么是图拓扑排序
数据结构与算法——图论基础与图存储结构
数据结构与算法:三十张图弄懂「图的两种遍历方式」
数据结构与算法——图最短路径
总结学习数据结构和算法的过程,是非常好的思维训练的过程,所以,千万不要被动地记忆,要多辩证地思考,多问为什么。
如果你一直这么坚持做,你会发现,等你学完之后,写代码的时候就会不由自主地考虑到很多性能方面的事情,时间复杂度、空间复杂度非常高的垃圾代码出现的次数就会越来越少。
你的编程内功就真正得到了修炼。大家加油:)
我在B站学算法:
哔哩哔哩(゜-゜)つロ乾杯~Bilibili强烈推荐:
GitHubPlus:卧槽!LeetCode电子书开放下载了!补充推荐一个阿里朋友的算法刷题的开源项目。
截至2020年11月,该开源项目配套的网站已经有一百二十万的访问量,在GitHub上收获了8500颗小星星。



这个开源项目是@halfrost(中文名一缕殇流化隐半边冰,简称霜神)去年刷算法题时整理出的520题,每道题都写了解题思路,全部都是GO实现的,并且每题都runtimebeats100%了。












至于为什么要求每题都runtimebeats100%。
霜神是这样回复的:优化到beats100%才算是把这题做出感觉了。有好几道Hard题,可以用暴力解法AC了,但只beats了5%,这题就如同没做一样;而且面试中如果给了这样的答案,面试官也不会满意,“还有没有更优解?”。如果通过自己的思考能给出更优解,面试官会更满意一些。
如果你把这些题解都摸透,相信在面试环节你可以从容的回答“还有没有更优解”。




作者介绍:霜神是前阿里巴巴资深后端工程师,业余时间酷爱写博客,目前他的博客已经有300W+的浏览量,是iOS开发届的大佬级别人物,霜神为人谦和,上周六我说能不能提供一份离线电子书,方便读者阅读,他立马熬夜研究,修改了好几个版本。
离线版笔记下载地址(已获授权)链接:https://pan.baidu.com/s/1YpRx1stuansEqyD-JX9CnQ密码:4bea

■很多数据结构和算法书的通病:
1.数学公式过多,推导过程很难看明白,作者没有考虑到读者的数学基础有限;
2.作者的语言表达能力欠缺,很多重要的数据结构和算法其实很简单,被他们讲的晦涩难懂,直接打击了读者的自信心,导致很多读者觉得是这些数据结构和算法过难,很不容易理解,其实是书的问题。
凡是看不懂或者看《算法导论》很吃力的同学,我都建议先看robertsedgewick的课程,我是通过robertsedgewick的算法课才把数据结构和算法搞明白的,他的课真正诠释了什么叫由浅入深、鞭辟入里、入木三分,他能让你get到这个数据结构和算法的本质,不容易忘。
课程地址:
《算法一》Coursera-FreeOnlineCoursesFromTopUniversities
《算法二》https://www.coursera.org/course/algs4partII
对应的书籍名叫《算法》,豆瓣地址:https://book.douban.com/subject/10432347/
我推荐大家先看课程,现在是多媒体时代了,视频课程更能展示算法的动态过程。第二个,这个课程的编程作业设置的非常好,课程针对编程作业做了大量的单元测试,能检测你的代码是否合格,然后打分。完成这些编程作业,会极大的增强你的自信心。
课程资源我分享到百度网盘了,有需要的私聊我。
另外多讲一点,robertsedgewick是高德纳的大弟子,cousera上面的计算机课,robertsedgewick的英语的语速和发音是最容易听懂的。
觉得好,点个赞啊,老铁们。
■02.09.2020更新一波这篇文章,对大家应该能有些帮助:
LeetCode按照怎样的顺序来刷题比较好?按照分类来刷,每个分类的题目,解法类似,这样就用一个思路解一类题目了:
GrokkingtheCodingInterview:PatternsforCodingQuestions-LearnInteractively?www.educative.io
这个课程将算法题目(类似LeetCode上面的算法和数据结构题目)进行了模式分类,每个类型模式,提供了经典的题目。
(如果你需要上面这些算法课程,那么你可以使用awesome-developer的折扣码获得网站所有课程的额外15%off!上面的折扣码针对单独购买所有课程有效。如果想买订阅(Subscriptions)的小伙伴,则可以用ZHIHUEDU-10(必须一模一样输入)的couponcode来获取额外九折的优惠按年和按月均适用。
他家最最出名的还是这门GrokkingtheSystemDesignInterview,但凡提到准备系统设计,这门课都上入门必推的:
GrokkingtheSystemDesignInterview-LearnInteractively?www.educative.io以及OOD:GrokkingtheObjectOrientedDesignInterview
GrokkingtheObjectOrientedDesignInterview-LearnInteractively?www.educative.io
既然要系统地学,那自然是要看书,上课,和练习相结合。三管齐下,缺一不可!
所以我从三个方面来讲一下。先是书籍推荐,再是网课,最后是练习平台。
先来看书籍有哪些?书挺多,但经典的也就那么几本,而且我建议选定一本之后,看多遍。而不是看好几本书,每一本走马观花。
其实抛开数据结构谈算法,都是耍流氓,所以我会推荐算法和数据结构的书。
首先是算法,算法和数据结构是计算机学习的基石。无论你学习计算机的任何方向,没有扎实的算法和数据结构,肯定学习起来就捉襟见肘了。
我自己非常喜欢的普林斯顿算法红宝书第四版,这本书是普林斯顿超级大神教授RobertSedgewick的神作,该书还有配套的MOOC课程,以后有时间再写网课了。该书是特别棒的算法和数据结构的教程,全书提供Java的实现,而且大部分内容也放在了本书的配套网站上:https://algs4.cs.princeton.edu/home/本书的优点是会把算法详细的过程掰开揉碎地讲明白了。书里面有大量的配图,更不说配套网站上的ppt,简直就是艺术。一句话,1万分推荐。就一个缺点,没有讲动态规划(DP),所以我在下面也推荐一些涉及到DP的书籍。你认真读此书的话,会发现很多大公司的面试题就来自它的习题里面。
还有另外一本算法神作就是算法设计手册了。这一本则是把算法分类了,还提供了特别多适用的算法应用场景,让读者知其然,并知其所以然。这本书的数和图部分,还有递归回溯,是特别多人拍手称赞的地方,值得认真看三遍。这本书就讲了第一本里面遗憾缺失的DP。总之,这两本都是超级强推。
提到算法,肯定会提到算法圣经之算法导论,这本书是算法百科全书,优点是全,缺点是太全太厚,数学太多了。是很好的参考书,但不适合短期突击学习。感兴趣的读者可以挑战一下。
接下来的两本,可以当做是算法的课外读物,写得浅显易懂。刚开始学算法的小伙伴,可以先从他们着手,第一本其实是合集,叫AlgorithmsIlluminated。分三个部分:基础,图算法和数据结构,贪心算法和DP。该合集页数比较短,但是看完之后,对算法的理解肯定会加深不少。
这个系列暂时还没有中文翻译,但Coursera上面有这个算法系列的课程:LearnDataStructuresandAlgorithmsfromUCSD/HSEonCoursera
提到Coursera的课程,就多说一句,现在最火的MachineLearning的课程在这里:AndrewNg\u0026#39;MachineLearning:MastertheFundamentals
第二本就是图解算法了,语言风趣,有比较多的插图。入门很合适。
最后一本算法书,名字就叫算法,作者还提供免费的教程,我个人觉得对面试帮助很大。因为里面讲解算法的思路,有点以题目为导向的感觉,其中递归和DP部分,让我有醍醐灌顶之感。
第二部分是数据结构,这里就推荐三本书,一本是Java,一本是Python。Java的就是鼎鼎大名的CS61B的课程推荐教程:DataStructuresandAlgorithmsinJava。Python的也是一本畅销书:ProblemSolvingwithAlgorithmsandDataStructures。
还有就是中文的《大话数据结构》,数据结构中文入门读物的不二选择。
提到的书籍有:
算法红宝书:
算法导论:
算法设计手册:
大话数据结构:
再来看网络课程。算法课程强推三门。
Again,选一个好好多学两遍,别都想学,没那么多时间,贪多嚼不烂。
网络课程的话,则是十二分强推UCB的CS61B。他们家的计算机系的CS61A,B,C课,简直制霸各种课程推荐列表。
CS61B的官网在这里:https://inst.eecs.berkeley.edu/~cs61b/fa19/2.MIT的算法课,教程用的算法导论,也是强推的网课:https://www.youtube.com/watch?v=HtSuA80QTyo\u0026amp;list=PLUl4u3cNGP61Oq3tWYp6V_F-5jb5L2iHb
3.然后就是红宝书的网课以及配套官网:
https://algs4.cs.princeton.edu/lectures/
https://www.youtube.com/watch?v=1QZDe28peZk\u0026amp;list=PLRdD1c6QbAqJn0606RlOR6T3yUqFWKwmX
最后是练习平台。光学不练,算法是学不会的。
所以推荐一些好的刷算法和数据结构平台,当然也是为了找工作面试做准备咯。
LeetCode。这是现在刷题找工作最热门的网站了。
但LeetCode现在题目也太多了,一共1200+了。全刷完没必要,也不高效,所以推荐看下面的回答:
大家都是如何刷LeetCode的?刷完LeetCode是什么水平,能拿到什么水平的offer?2.Educative
Educative:InteractiveCoursesforSoftwareDevelopers3.LintCode。这个网站上面的solution功能很好。
其他的网站还有很多,但我觉得刷题和看书一样,选定一个就好,剩下的就是多刷题,多总结。
量变才能质变,但别盲目追求数量。

以上。

■曾经因为看不懂数据结构和算法,而一度怀疑是自己太笨,实际上,很多人在第一次接触这门课时,都会有这种感觉,觉得数据结构和算法很抽象,晦涩难懂,宛如天书。正是这个原因,让很多初学者对这门课望而却步,希望以下分享能为初学者排忧解难。
我个人觉得,其实真正的原因是你没有找到好的学习方法,没有抓住学习的重点。实际上,数据结构和算法的东西并不多,常用的、基础的知识点更是屈指可数。只要掌握了正确的学习方法,学起来并没有看上去那么难,更不需要什么高智商、厚底子。