对于不少码农来讲,算法老是显得有那么一点高深莫测,好像是一道难以跨越的坎。形成这种现象的缘由,一是由于咱们对算法的了解和对本身能力的了解不够,还没入门就被吓退了,另一个缘由是,大部分人实际工做中不多用到算法,不少算法都已经被封装到函数库或接口里面了,只须要调用就行,而为了能早点完成任务,咱们通常都不会去想接口里面的算法如何实现,只管调用来完成任务,顺利交差就万事大吉了。程序员
“无论用什么方法,可以完成任务就能够”,其实我以为这种想法也是能够的,毕竟咱们搞技术的都比较崇尚实用主义。可是若是咱们懂得背后的原理,可能内心会舒坦一些,并且在使用别人接口达不到理想的性能要求时,能够分析是不是接口的实现有问题,从而懂得去选择其余实现版本或者本身动手写,而本身动手写,就必须懂算法了。此外,不少大公司在面试中,每每也会考你算法,不少不少人都倒在算法这个环节上,尸骨遍野。这就是做为码农,即便你的工做不是算法研究,也须要了解一些基础算法的缘由。面试
基础算法,我以为对于大部分程序员来讲,经过必定时间的练习,是能够学会的。了解了这一点,咱们才不至于很容易被算法吓退。若是你是个算法小白,如今要开始学习算法了,但是又不知道从何学起,那么我这里给你一些建议。算法
首先,去找大学的数据结构和算法教程来看。我为何不推荐不少人都知道的大部头《算法导论》呢?我是怕这大部头又把你吓退了,因此仍是先从简单一点的开始吧。数据结构和算法是分不开的,通常来讲,每种算法都是为某种数据结构服务的,不一样的数据结构,每每须要使用不一样的算法。数据结构,能够理解为,咱们存放一堆数据时,要以某种结构形式存放,而算法,就是要从这堆数据中寻找到你想要的那一小坨数据的方法,而衡量算法优劣的,是空间和时间复杂度,也就是若是你能使用更少的时间和更少的空间(好比计算时须要使用的内存)就能获得答案,那么这个算法就是更好的。数据结构
假设你已经学过教材了,练习过教材上的一些算法题目,那么如今你能够尝试去刷刷LeetCode上的题目了。LeetCode上有不少算法题,按难度分为初级、中级等,练习时能够从简单的到难一点的,这样容易让你练习的过程当中保持信心。不少公司在面试算法题时,也是直接使用LeetCode上的题目。我本人曾经在远程面试一家不错的外企时,被要求线上完成3道算法题,由于当时已经有比较长时间不接触算法题目了,因此没能很好完成,也错失了一次机会。而后次日,我就去LeetCode上看题目,恰巧看到了这家外企出的算法题目,我再尝试去解决,没想到顺利把这些题目完成了。若是我在刷这几道题目以后接受那家外企的线上算法题笔试,也许Offer早就收入囊中了。如今,你应该知道,想要得到好的机会,为何刷刷算法题可能也是必要的缘由了。数据结构和算法
除了LeetCode,还有一个我推荐你学习算法的网站,这个网站叫作:GeeksForGeeks,随便搜下就找到了。这网站上面有很多巨头公司的算法题目,包括微软、谷歌、亚马逊、Facebook等等,而且给出了解法,同时有很多面试者分享他们去这些公司面试后的面经,你能够参考参考。我曾经在这个网站上呆蛮长一段时间,如今好久没上去看了,写这篇文章时,我再打开这个网站,已经很难打开了,貌似须要你会轻功才能顺畅访问,哎,我就不说得太直白了。函数
以上提到的那些学习资料或网站资源,在你学习时,可能也会以为学是学了,惋惜缺少使用场景,仍是没法感觉到这些算法的威力所在。如今也有一些付费的算法专栏,号称根据使用场景带你学习算法,让你真正明白算法是如何在实际项目中使用的。由于我没有订阅这个专栏,目前也不想免费给他们作广告,所以仍是先不提了,若是须要这种学习方式,能够本身去搜索了解下这些专栏,或者私信我,我会告诉你去哪里订阅。性能
做为程序员,若是你还有蛮多闲暇时间,除了打游戏不知道干吗的,建议这样去学学算法吧。不过提醒一下,我这些建议主要是给没有算法基础或者算法基础薄弱的技术人,高手路过期,还望理解,如能笑纳,本人将倍感荣幸!学习
原文地址:闲着没事?你能够这样学学算法网站