当前位置 博文首页 > 程序员吴师兄的博客:写了三百篇算法题解,关于如何刷题有些话我

    程序员吴师兄的博客:写了三百篇算法题解,关于如何刷题有些话我

    作者:[db:作者] 时间:2021-06-13 09:41

    这篇文章憋了我挺久的,感觉都快憋出内伤,一次次的打开 Typora 写几十个字,一次次的修改删除最后关闭 Typora,如此反复。

    为什么会如此纠结?

    或许是太狂妄了,我真的想让那些看了这篇文章的人都能从中受益,无论是算法小白还是高手,导致文章的立意拔的太高,高到我驾驭不住,远远超出了我的实际水平,于是一次次的开始写,一次次的废除。

    直到最近才想明白我应该写一篇什么样的文章,这篇文章的目标群体不是那些立志于参加 ACM 的大佬,也不是早早的就是刷了好几百道 LeetCode 的高手,而是那些徘徊在要不要刷题、如何刷题的算法初学者们,我问自己,当年还是小白,为了进大厂,在珠江新城艰难挤上地铁后打开手机日复一日不断的重复看算法面试视频时, 是否想要看这样的文章来确定方向,我的答案是会,收藏然后狠狠地点个赞仔细的看。

    开头稍微啰嗦了几句,下面开始进入正题。


    不知道你们一开始刷算法题的时候是否有过如下的困惑。

    • 1、题目很长,半天看不明白是什么意思
    • 2、明明看懂了题目,但写出的代码却提交不通过
    • 3、代码写到一半发现不知道怎么往下写了
    • 4、别人的题解一看就懂,但自己想破脑袋都想不出要用这种方法
    • 5、即使刷了两百多道题目,面试的时候一紧张还是会头脑空白发慌

    你问我为啥知道这些?因为我都经历过。

    我们都是从应试教育中厮杀出来的,所以对刷题应该是挺熟悉的,缺的只是方法,人人都可以是小镇做题家。

    方法是什么呢?

    可以归纳为两个,一个是战略,一个是战术,犹如行军打仗,两手都要抓。

    在战略上,我们需要做到的是藐视算法题。

    在战术上,我们需要做到的是重视刷算法题。

    一、战略上藐视算法题

    在战略上藐视算法题的目的是为了在心理层面上克服恐惧,事实上,不仅仅是算法题,诸如学习计算机基础、计算机网络、编译原理等程序员必备的知识时,有这个心态可以学起来事半功倍。

    我亲身经历过这样的改变。

    作为一个转行程序员,在转行学习编程的那段日子,没有人告诉我说要去学数据结构,也没有人告诉我说要去刷 LeetCode,都是靠自己一个人摸索,绝大部分的时间都花在具体项目上,误认为自己和那些已经工作的程序员的区别在于有没有做过项目。

    这就是科班出身和非科班出身的学生最大的区别,科班出身的学生知道去学什么,知道大学期间安排的每一门课程是干什么的,知道要先去做哪些小项目来循序渐进的编码练习,知道知识点在工作中能起到什么样的具体作用,非科班出身的程序员感觉计算机相关的知识点简直是一团乱麻。

    这种情况导致我去找工作参加面试的时候,很多基础面都通过不了,最后侥幸进入一家要求不太高的创业公司,薪资不高,为了进大厂必须完善算法和计算机的知识。

    因为未知,所以恐惧,恐惧导致盲目的崇拜,我认为那些科班出身的程序员太牛逼了,居然可以掌握那么多繁杂的计算机知识;那些写源码分析的程序员都是大神;那些写算法题解的程序员都是高手。

    恐惧把小的问题放大,比如学到单调栈、双向链表、记忆化的内容,一看到题目要用到这些概念便觉得代码很难写,索性那些内容就不看,所以学了大半年还在原地踏步,还在原来的公司拿着微薄的工资做着 CURD。

    几个月后,创业公司不行了,受迫于重新找工作的压力,只好咬着牙再去啃,再去刷题。

    而当我开始写题解、做动画的时候,我就发现算法题也就那样,缺的只是时间去不断的重复练习。

    单调栈无非就是在栈的概念基础上增加了排序,记忆化也就是增加一个数组用于存储,动态规划在面试和实际工作中用到的只需要掌握百分之五就行。

    抱着编程技术也就那样的心态,学习了爬虫以及 Vue。

    v2-f6b70abbc3baeb0c7166113dd518bba1_b.png