>点击上方“Java Dev”关注<

看看你有多少好友也关注了我

Photo From Internet

说起学习算法,相信每个程序员都有一段故事,有的人可能是痛苦的,有的人可能是快乐的,也有的人可能是平平淡淡的,今天就和大家一起来聊聊我的算法学习之路。

我的辛酸经历

首次接触算法是在读大一的时候,计算机的专业的同学想必都会在大一的时候学习一门课叫做 “C 语言程序设计”。这本书里面的某一章节中介绍了冒泡排序算法,这是我接触的第一个算法,然而大一这一年我连 C 语言都没有学好,就更别说算法了。

第二次接触算法的时候已经读大二了,那时候开了一门课程叫做 “数据结构”,当时采用的一本教材是清华大学出版社出版的《数据结构(C 语言版)》,作者是严蔚敏老师,书名可能大家不记得了,但是看到下面这个闪耀的封面,是不是一下子又把你拉回了那个青涩的年代。

这本书虽然主要讲解各种数据结构,但是也涉及到了一些的算法,例如排序、树的遍历、图的遍历等等。还清楚的记得当年期末数据结构考试的时候考了 95 分,你以为我数据结构学的很棒了吗?然而并没有,注意到前面的书名了吗?这本教材采用 C 语言描述,大学才开始接触编程的我一直处于懵逼状态,虽然大一学了 C 语言,但是根本没有学通,只会写写 Hello World,结构体指针什么的都没有弄明白。

之所以能考到 95 分是因为试卷里面大多数是选择填空题(唉,可能学校为了控制及格率吧),小老哥我虽然 show 不了 code 只能 talk ,到最后也拿了个不错的成绩,毕竟最后一周老师划了考试重点,由此可见学习重点知识的重要性,哈哈。

就这样数据结构混完了,转眼到了数据结构的短学期实战课,show 不了 code 我最后只能缴械投降了,到此我掌握了大量的数据结构概念,但是一到写代码就懵逼,就这样与算法的第二次约会结束了。

转眼间就大三下了,学校里开了门专门的算法课,作为一个标准的学渣当然不知道这门课的重要性,虽然此时我已经成为了一名标准的 CRUD Boy ,熟练的掌握了 J2SE 和 J2EE (老程序员应该对这个称呼很熟悉,现在一般叫 Java SE、Java EE),但是我依然稀里糊涂的上完了这门课,各种算法套路左耳朵进右耳朵出,与算法的第三次约会又悄悄的结束了。

很快的就毕业参加工作了,整天 CRUD。慢慢的 CRUD Boy 的烦恼诞生了,觉得技术达到了瓶颈,开始向项目组的技术大佬开始请教,寻求找到方向。经过大佬的指点迷津,我决定开始学学算法,把基本功打扎实。大佬对我说了什么,基本呢和我在上一篇文章《 面试了一个月,到底要不要刷算法?我有了答案 》提到思路一致 ,还不知道为什么要学算法的小伙伴可以过去洗洗脑。于是我兴冲冲的跑去买了如下一本书:

好吧,结果不用我多说了,从入门到放弃没有超过一个月,我老老实实的继续去做 CRUD Boy 了,这算是我与算法的第四次约会吧。

我的感悟

经历了前面的几次的惨败,接下来就是与算法的第五次约会啦。基本还算成功,通过层层关卡,最终拿到了满意的offer,这一次我与算法之间发生了什么?为了战胜算法小怪兽,我制定了一个周密的打怪升级计划。

明确学习的目的

通过我的辛酸算法学习经历你应该也发现了,前三次都是处于一个懵逼的状态,完全没有明白学习算法的意义,没有清晰的目标。第四次虽然明白了学习算法的意义,但是由于战略的错误,导致虎头蛇尾,很快就败下阵来。相信看到此处的你已经有了明确的目的,如果你还是不明白,那就去翻翻《 面试了一个月,到底要不要刷算法?我有了答案 》。

明确要达到的目标

明确了学习算法的意义以后,接下来就是设置一个目标啦,有了目标你才会学习的更加有动力。第五次我学习算法的目标就是让面试中碰到算法时不再愁眉苦脸,面红耳赤,就是这么俗气简单。当然啦,这个目标还是有点大,还要再一步细分,数据结构与算法知识繁杂,具体看看下面这张图:

但是真正面试中考察到的其实都比较经典的常见的一些算法和数据结构,所以想要攻克面试中算法只需要掌握一些核心经典的算法和数据结构就差不多了,如下是我整理的一些常见的算法数据结构:

怎么样,是不是精简了许多呢?所以,不要被繁杂的知识吓到,要善于去提炼重点知识,集中精力突破。

光说不练假把戏

学习目标制定了好了以后就是不断去学习实践咯,想必热爱学习的你一定听说过 10000 小时定律。学习算法也是一样的,不能光学理论知识,而忽略了代码实践,不然很可能会造成像我的第 2 次经历一样,光掌握了一堆概念理论,一遇到写代码就懵逼,要知道现在面试过程中可都是要白板手撕代码的哦。

在我 5 次战斗中,我采用了 LeetCode 来实战演练算法,每学习完一个数据结构或者算法,我就会去 LeetCode 中找到相关标签下面的题目都做一下。做的过程中难免遇到百思不得其解的题目,如果花费了一半个小时候你还没有思路,我建议你去看看答案。说到答案呢,我推荐一个 Chrome 刷题插件 “九章刷题小助手”,刷题小助手里面有所有 LeetCode 算法题目的答案,而且答案有多种语言的解法,Java、Python、C++,同时也给出了多种解题思路。

当然啦,如果你能找到几个志同道合的小伙伴一起刷题是最好的,遇到不会的题目可以一起讨论,做完题目以后交流思路,这样学习起来会更有效,也更快乐。同时当你想要放弃的时候也有小伙伴可以监督你。

做完题很重要的一个过程是总结,像我在第五次学习的时候就和几个小伙伴一起,创建了一个刷题微信群,每天下班一起做一道题,做完后交流思路和答案,总结题型解法,就像高考做试题一样将题目归类,下次出现同类型的题目直接破解。

打怪升级

开始行动了以后也要注意学习阶梯,每天做难题的话信心容易受到打击,所以最好的方式是让做题能像打游戏上瘾一样有趣。如果我们做题也有一个递进关系,从简单到复杂,每天学习要有 20% 是容易学习的旧知识,这样容易建立起自信心。每天信心满满,遇到特别难题可以先放下来等后面再倒过来学习可能就会变得简单了。

以上就是我与算法的故事了,你是不是也和我一样有一个辛酸的算法学习过程呢。

来吧,大声说出来,让我们一起笑一笑,哈哈。

往期精彩

面试了一个月,到底要不要刷算法?我有了答案

1 分钟看穿零拷贝技术,看不懂你打我

为什么 Java 程序员必须要懂类加载机制?

高级 Java 面试必问的三大 IO 模型,你 get 了吗?

细嚼慢咽 Java 线程池,你品你细品

分享一道美团一面的面试题,简单又细腻

final 这道送分题,你答对了吗?

面试官问我 volatile 是否存在伪共享问题?我懵逼了

Java 垃圾回收器很难?是你学的方法不对

当我们在谈论内存时,我们在谈论什么

聊聊 Java 的几把 JVM 级锁

感谢你的阅读,我为你准备了一份《高级 Java 面试指南》。

获取方式:点击在看,关注公众号,回复 "礼物" 获取。

照着做,你也可以战胜算法小怪兽相关推荐

  1. 用Python做个美少女大战小怪兽

    对于飞机大战,想必大家都一定不会陌生,但是对于美少女大战小怪兽呢,大家是否玩过呢,今天小编就带领大家从头开始,制作一个<美少女大战小怪兽>的初级版.之所以是叫初级版是因为这个游戏只是实现了 ...

  2. Goop:滚吧,小怪兽

    别误解标题的意思,Goop是并不是要玩家扮演打小怪兽的奥特曼,而是要帮助一只只小怪兽躲过变成落汤鸡的危险,而怎么帮助他们呢,让他们滚着躲过水滴就好了. 游戏名称:Goop 游戏平台:iOS 游戏价格: ...

  3. 奥特曼和小怪兽的故事

    "妈妈,妈妈,"小怪兽问,"我什么时候才能长大呢?" 正做饭的怪兽妈妈和蔼地问:"干吗想长大呀,做妈妈的乖宝宝不好吗?" "长大了 ...

  4. 每个成功的奥特曼背后都有一个默默挨打的小怪兽

    (一) "妈妈,妈妈,"小怪兽问,"我什么时候才能长大呢?" 正做饭的怪兽妈妈和蔼地问:"干吗想长大呀,做妈妈的乖宝宝不好吗?" " ...

  5. android ios 画图 app,手残党也能自画“小怪兽”?这些画图app你必须知道!

    原标题:手残党也能自画"小怪兽"?这些画图app你必须知道! 如今,手机在手,所有事情都变得越来越简单,画画也是. 年轻人的流行主题总是来得又快,走得也急.这个现象在大家的朋友圈中 ...

  6. 每个成功的奥特曼背后都有一个默默挨打的小怪兽_陕南赤子_新浪博客

    (一) "妈妈,妈妈,"小怪兽问,"我什么时候才能长大呢?" 正做饭的怪兽妈妈和蔼地问:"干吗想长大呀,做妈妈的乖宝宝不好吗?" " ...

  7. (nlogn)的时间复杂度求 最近点对 hdu 1007 凹凸曼与小怪兽的故事 poj3714 Raid...

    hdu 1007  Quoit Design http://acm.hdu.edu.cn/showproblem.php?pid=1007 zoj 2107 Quoit Design http://a ...

  8. 贝灵机器人智能点读笔好吗_小怪兽AI智能点读笔笔值不值得买,看完你就不用纠结了...

    小怪兽AI智能点读笔笔值不值得买,看完你就不用纠结了 2020-08-26 16:17:46 7点赞 4收藏 0评论 小编注:此篇文章来自即可瓜分10万金币,周边好礼达标就有,邀新任务奖励无上限,点击 ...

  9. java奥特曼对战小怪兽_JAVA程序设计(09)-----面对对象设计初级应用 奥特曼打小怪兽...

    1.一个奥特曼固定属性 4个小怪兽随机名字 随机属性 奥特曼有几率发动暴风雪技能 对所有小怪兽造成 50%~60%冰霜伤害 无视防御力 普通攻击伤害为 攻击力*80~120% - 对方防御力*60%~ ...

最新文章

  1. Verilog中状态机编码方式的选择:二进制编码(Binary)、格雷码(Gray-code)编码、独热码(One-hot)编码
  2. 1.4 正规方程-机器学习笔记-斯坦福吴恩达教授
  3. IDEA出现import org.junit.Test飘红解决方案
  4. 山重水复疑无路,柳暗花明又一村
  5. 这就是计算机男用英语怎么说,科学网—Is a computer male or female? 计算机是男的还是女的? - 邱敦莲的博文...
  6. html语言入门测试题,Web前端:20道非常基础的JavaScript测试题
  7. 在JBoss Fuse / Fabric8 / Karaf中使用Byteman
  8. pandas小记:pandas基本设置
  9. openwrt增加内核模块的方法
  10. 安卓期末大作业(AndroidStudio开发),日记本app,代码注释详细,能正常运行
  11. 基于小米球(Ngrok)实现内网穿透
  12. 用cmd命令行在windows系统中进行分区操作
  13. 最佳牛栏(前缀和+二分)
  14. C语言统考试卷一及答案,2017年《计算机应用基础》统考试题及答案
  15. 专注要事、把手弄脏、高效优雅是对抗规模化焦虑的好办法--读Getting Real(达成现实)和 Rework(重塑工作)
  16. 谨以此文,献给我的大学四年—双非本科到双一流985的成长之路
  17. vba 发送邮件 html,VBA自动发送邮件+内容+附件
  18. url scheme 实现跳转到小程序页面
  19. python as f是什么意思_Python中 with open(file_abs,'r') as f: 的用法以及意义
  20. 苏州大学计算机学院江苏如皋人,秦岭深处的火热青春——记苏州大学如皋籍学生佘一奇的支教故事...

热门文章

  1. 2021-2027全球与中国光纤收发器市场现状及未来发展趋势
  2. 装机软件汇总精华帖(2018年1月13号更新)
  3. 运用快速幂算法(南昌理工学院ACM集训队)
  4. 快数幂算法(南昌理工学院)
  5. 攻防世界:C++复刻MISC掀桌子
  6. Windows C++堆破坏场景及分析
  7. 【论文阅读】Temporal Segment Networks: Towards Good Practices for Deep Action Recognition
  8. 论文阅读之:基于序列列到到序列的中文AMR解析;Chinese AMR Parsing based on Sequence-to-Sequence Modeling
  9. 撕心裂肺的爱情(我就不信你不哭)
  10. pygame 弹球游戏