大家好,我是帅地。
本篇文章主要讲解下面三个事:
1、自己学习算法的一些经历
2、大家学习算法存在的一些普遍问题
3、给大家规划的算法刷题路线
一、算法学习往事
记得当初学了 C 语言就开始刷题了,刷题倒不是面试,而是为了通过转专业考试,因为我大一第一学期读的是非计算机专业,了解到转专业需要做 一些简单的算法题,那会我就给同学借了学校的 OJ 账号,开启了一波刷题之路。
到了第二学期转专业考试,也是轻松通过的考试,因为对我来说,那些试题太简单啦。
到了大一第二学期之后,我就慢慢开始学习数据结构了,在 OJ 上也没怎么刷题了,因为比较简单的题都被我刷了,剩下的都是一些比较难的题,有些刷不动,就没刷。
那会刷的题都比较考察思维,没有涉及诸如回溯啊,动态规划啊这些算法思想,不过那会是刷的真爽,因为每次通过一道题就可以升一个等级,刷了比较难的题直接涨 三个等级(当然具体我也忘了,只是记得是这样)。
不过我很庆幸那会的刷题,虽然没有学到各种牛逼的算法思想,但是刷了一两百道题之后,我觉得我的编码能力确实有 不少的题型,比如很多时候,我能够把自己的想法转化成具体的代码,而这种能力,我觉得是非常重要的。
后面学习数据结构的时候,有不少题数据结构,我了解了思路之后,自己就能够试着去写代码了,即使存在不少 bug。
大概第二学期花了两个月学完了《数据结构与算法分析:C语言描述版》这本书之后,根据自己各方面都有了挺大的提升,然后学校也有开设算法选修课,通过选修课也接触了诸如 枚举啊,贪心啊,动态规划,回溯之类的算法思想,不过那会是真的不知道老师在讲什么,特别是动态规划,一上来就是 0-1背包问题,反正我是听的 一脸懵逼。
之后自己就去买了好些书,比如《挑战程序设计大赛》,《编程之美》,还有ACM算法竞赛啥的,反正忘了,总的来说就是,书看的比较多。因为那会不像现在,网上攻略一大堆,网课也一大堆,当然,那会也没有诸如校招等相关信息。
但是我觉得也挺好的,至少学的很爽,也没想着是要笔试,面试啥的,学的比较纯粹,然后也有去一些诸如 杭电OJ 的平台刷了一些题,leetcode 倒是刷的不多,leetcode 是后面校招求职才知道的。
总的来说就是,大一和大二第一学期,在算法上还是花了不少时间,也学的很快乐,但是要说刷题的数量,其实不多,我感觉可能就是三四百道吧,但是我觉得对于 leetcode 上的题,很多题还是可以做出来,包括后面大厂面试,基本都能做出来,笔试的话,有点难,但是也做的还行吧。
总的来说就是,我觉得先打基础非常重要,之后再去学习一些算法思想,之后再刷题巩固。
二、大家学习算法存在的一些普遍问题
刚才我大致说了我算法学习的一个大致路线,相对来说我踩坑是比较多的,比如我是踩了坑之后,再去学习对应的算法思想,而且前期刷了很多基础题,编码能力也还不错。
但是现在的很多人,我觉得编码能力好差啊,比如有些人说已经刷了 300 多道 leetcode 的题了,我以为挺厉害了,但是我让他做题,发现好菜啊,就是不够灵活 + 无法把自己的想法用代码表达出来,而且寻找 bug 的能力也比较差。
而且很多人也是按照 leetcode 的顺序刷题,如果是非初学者,我觉得按照顺序也是没问题的,但是 leetcode 顺序的话,难度分布还是不科学的,如果你硬着头皮去刷,肯定被劝退,比如第十题就是正则表达式。
当然,也有很多人直接跟着攻略学习一些算法思想,然后刷题,这样也不是不行,但是如果是初学者,比如学习了一门语言,并且也没做过什么练习题,那么其实编码能力很差的,即使学懂了算法思想,但还是会无法自己独立写出代码,原因就是基础太差,我觉得可以先做一做基础题,再去学这些算法思想,再去刷题吧。
三、给大家规划的算法刷题路线
然后也有很多人问是按照 leetcode 顺序刷题还是分类刷题,其实刷题没有严格顺序,专题刷或者顺序刷都可以,但是这对于初学者来说,容易遇到很难的题,进而被劝退,所以我也给大家规划了一个刷题顺序,如果你没有明确的目标,你可以按照我这个顺序来刷题,本刷题顺序只是基于我个人的刷题理解,挑选了差不多 200 道题,并且会按照循环渐进且相对系统的方式给出题目,反正按照这个顺序刷,以后应付算法面试或者打蓝桥杯这些都是问题不大。
大致目录
当然,这个刷题路线是免费的,大家如果没有明确路线的,可以跟着刷,题量 也是挺多的了,跟着刷完,面试和蓝桥杯这些,应该问题不大。
算法刷题路线地址入口:https://www.playoffer.cn/1216.html
大家加油!