00:00
小朋友,你是否有很多问号?为什么大家看漫画?我听学画画。一个大声说话。大家好,我是程序员戈皮,大家要的学习算法的经验终于来了,我当时总共刷了1000多道算法题,这期视频就聊聊我和算法的爱恨情仇,主要包括为什么要学算法,为什么要刷题?学不动算法怎么办?编程新手怎么刷题?怎么高效学算法?有哪些好的资源,以及什么时候可以停止刷题了。先说说我对算法的态度,嗯,我很爱算法,非常爱,为啥?当然是因为算法是程序员的内功,从底层系统、数据库、网络开发框架、中间键,再到编写代码,计算机处处离不开算法。学好算法不仅能够培养逻辑思维,帮助我们更好的理解计算机系统,还能更好的阅读和编写代码。说人话,关键是不学算法找不到工作啊。
01:04
好吧,现状就是太卷了,算法题目已经成为了一种筛人的方式,大厂的每一轮面试基本都会有几道算法题,甚至有的公司笔试呢,全部都是算法题,大家其他题目答的都差不多,那你算法题做不出来,不淘汰你淘汰谁呢?所以为啥要刷算法题呢?一方面是帮助你学习和理解算法,另一方面呢,也是像背公式、背八股文一样,增加你面试时碰到原题的概率。就我刷了1000多道题嘛,不夸张的说,在面试的时候,80%的算法题都是原题,就我遇到面试的时候,我还要憋着笑,故作深沉的思考一会儿,有时还要演一波,装作在面试官的指点下顿悟。给他一点成就感,我就是给你们看看小玩书好了。其实每个人学算法刷题的目标是不同的,常见的目标有以下四种,一、学习基本的编程语法和思想,二就是想找大厂的工作应对面试,还有就是参加算法竞赛,或者想要自我提升,锻炼一下思维能力。有不少小伙伴表示,啊,道理我都懂啊,我也知道必须得学算法,哎,但我就是学不下去,是我自己太笨了吗?
02:22
那这么想做的小伙伴们可以扣一个一啊啊,我先来个一。的确曾经我也这么怀疑过自己,我恨算法,恨每一道题的每一个代码字符,但后面坚持下来,找到方法之后,就慢慢的对算法有一些感情了,基本是一天不刷,浑身难受。那有小伙伴问了啊,学不懂算法怎么办呢?答案很简单,你要选择更合适的资源。很多同学学不懂算法就是因为在刚开始的时候选择了错误的学习资源。大部分同学刷算法都是为了找工作,比如说我,就是我对算法竞赛没有任何的兴趣。
03:01
但当时正好就有一门课,就是做算法题,每周要做五道题,老师让看那个挑战程序设计竞赛那本书,压力很大,导致我很多的题都是复制网上的代码,然后略作修改。以混落制的抄袭检测啊,但是呢,你这些题教完了,这课上完了,我这算法也真的是彻底绝望了。还有一些同学啊,刚开始学编程,你还没写几行代码,就想着要提前刷算法准备起来了啊,你想法是不错,想成为算法小王子,但是你现在的目标应该是熟悉基本的编程语法和思想,你直接跳级的话肯定会有难度,也没有那个必要。因此啊,大家先要明白你学算法的目标,你的目标不同,刷算法的方法和资源也不同。那下面先聊一聊编程新手怎么刷题。你可能听说过,Little确实是不错的算法刷题平台,但如果你连编程的语法还不熟悉,很多函数都不会用,我建议你先老老实实的做一些基础的练习题。
04:10
比如我大一的时候,基本就是在刷老师留的online judge上的作业题目啊,上面题都很水,就每道题目都是解决一个小问题,像水仙花束、飞波纳妾,用面向对象编程来造汽车、造人等等,目的是帮助同学们学习编程语法,熟悉一些基本的编程思想。比如面向对象啊,这些题都很容易上手。还有呢,就是课堂作业,你不要瞧不起课堂作业啊,大部分都很基础很基础的,如果你连基本的课堂作业都完不成,你也不要考虑什么其他的题目刷题平台了。网上也有很多的练习题目,比如说pet的程序设计类实验辅助教学平台啊,上面就提供了不少简单的入门练习题,比如基础编程题目集啊,浙大的C语言教材题目集等等。如果你已经能使用一门编程语言开发简单的程序了,那就可以确定下一个目标了啊,问自己几个问题吧。
05:07
我对算法感兴趣吗?我有数学天赋吗?我学算法是为了通过面试还是想挑战自我参加竞赛呢?那我也想看看大家的选择,找工作的朋友请扣一啊,参加竞赛的朋友请扣二。我看到大部分的同学都扣了一啊,那我下面演示一下,就以找工作为目标,如何高效的学习算法,有哪些好的资源呢?不要想着速成,想学好编程,一定要多写代码,同样,想学好算法,最好的方式就是刷题。多刷题跟做数学题一样,而找工作刷题选择Li就够了,国内最全的算法刷题网站。我是从大二开始刷算法的,每天坚持留两个小时刷两到三道题目,大概过了一年,光在Li上就刷了600多道题。
06:04
还刷了一些其他平台或书籍上的题目,比如说纽克、pat等等。刷了这么多题,面试中遇到的算法题目基本都可以迎刃而解。那大家刚开始接触little的,刚开始刷题肯定都是一脸懵逼的,像我当时一样,所以下面给大家演示一波如何在Li上更好地刷题,大家要记住四个要点,从学习板块刷起,从简单的题目刷起,从通过率高的题目刷起,从高频题刷起。先看看学习板块,点击学习,这里是精心整理的算法和数据结构专项练习,每个专项呢,都对应了一个很重要的知识点。比如初级算法堆、队列、站、数组、字符串递归、二叉数列表、哈希表、二分查找排序、深度优先搜索、广度优先搜索、动态规划等等,这些都是面试时的重点,我们可以以这个队列和站为例子看一下。
07:11
它每个专项呢,都对应一个重要的知识点,并且通过一系列相关的题目和练习带大家入门,相对于自己从这么多的题库里面。零散的去选择题目来说更加的实用、简单、体系化,而且还富有动画。以及详细的讲解,真的是入门的不二之选。大家可以先完成专项练习中一些简单的题目,理解其背后的算法和数据结构,之后呢,再去举一反三去练习更多的题目。当你能,当你能做到用同一个算法解决一类共性的问题时,做到多题一解才算是真正的理解了。那刷完专栏之后,我们就来看一下题库利用平台自带的题目筛选以及排序功能呢?
08:03
可以帮助我们从简单到中等再到困难,渐进式的刷题。一般来说,建议大家先刷通过率较高的题目,相对会比较容易。现在还有一个不错的网站to the top整理了这互联网大公司的招聘题目。大家要重点关注一下,这些问题都是其他小伙伴遇到次数比较多的。刷算法的第二个技巧呢,就是利用题解。lico上的每道题目都有很多小伙伴给出了自己的看法,还有题解详细描述了如何解决这道问题。那怎么样才算利用好题解呢?读思路。和读代码。你既要理解作者做题的思路和逻辑,也要细致入微的去仔细看它的每一行代码。为什么你要写三行,别人用一行代码就能搞定呢?要多学习别人优秀的写法。
09:01
即使这道题目你做出来了,也击败百分百的对手了。我也建议大家多去看一下别人的题解,学习更多他人解题的思路,帮助自己打开脑洞,做到一题多解。在面试的时候,如果能一题多写,也是能大大加分的。那除了lico的平台自带的体解之外呢,网上也有很多其他大佬整理的算法题解。我们可以在边程导航上搜一下哈。比如说全网疯传的赌桌大佬算法刷题笔记C加加版本。还有阿里大佬的构语言算法题解。还有数据结构、Java语言描述。还有这个强烈推荐的动画讲解算法的宝藏仓库。以及一些好书啊,像小辉的算法之旅啊,兼职offer啊,程序员面试指南啊,都是比较经典的适合找工作看的算法书籍。哎呀,不得不说啊,现在题解实在是太多了,大家在刷题时选择自己觉得不错的,读个一到两份就可以了,也别给自己太大的压力,保护好头发也是非常重要的。
10:13
还有很重要的一点,除了看题解外,很多同学没有意识到,你要多写题解才是真正的法宝。比如我当时啊,其实也写了很多的题解。看一看咯。还有不少的赞呢。建议大家把自己的解题思路整理成文或者讲给别人听,这样做不仅能够加深自己对题目的印象,进一步加深对算法的理解,还能帮助自己回顾解题过程,更好的复习。从而在面试的时候更容易复述给面试官。当然还能帮助到更多的同学,比如说我的体检啊,有520的阅读量,我不知道有没有小伙伴看到过我的体解啊。可以扣个一。抽着灵也好,别让我太尴尬。高效刷算法的第三点呢,就是精益求精。
11:03
追求极致,当你每次成功解题的时候啊。系统会生成一份解题报告,告诉你的程序在时间和空间上击败了多少用户。虽然说你已经答出来题目就很棒了,是吧?但还是不够的。在面试的时候呢,一些面试官就喜欢给你出题目的变种,或者要求你用更优的方式解出题目。所以,在保证你完全理解题目解法的基础上,请不断的优化你的代码,找到更多的思路和更优解。直到击败百分百的用户吧,当然他这个东西有时候也不准啊,我们在工作中啊,虽然未必会直接和算法打交道,但是学算法对工作的帮助真的是很大的,解算法的时候,我们要对多种算法分析复杂度,选择一个最优解。在工作中呢,也是如此,一个需求有很多种实现方式,比如你可以用C加加,也可以用Java。
12:03
经常也要设计几种不同的方案,分析它们的成本、性能等差异,选择其中一个最好的来实施。所以啊,这个建议大家认真的对待每一道算法题目,把它当成一个工程问题来解决,相信你的思维呢,也会逐渐打开,并且逐渐掌握编写高性能程序的技巧。高校刷算法第四点呢,参与竞赛。也不需要是那种ACM专业的区域赛的那种大神级别的,其实啊,像Li的纽扣网,每周他都会开展一些线上竞赛。大家可以参加一下这些竞赛,任何人都能参与啊。紧张刺激的环境啊,能让我们的精神保持高度集中,激发思维,在有限的时间内更加专注,更多思考,也能够帮助我们适应面试时的节奏。而且啊,参加竞赛还有一些或多或少的奖励。
13:00
如果你拿一个第一名,那真的就是我对钱没有兴趣了。虽然我这个小菜鸡一次也没有拿到,都是靠每日登陆来攒积分。呃,此外还有一些线下的竞赛吧,比如说蓝桥杯竞赛也是不错的,我自己参加了两届,题目的难度和找工作要求的算法题目难度基本相当。就也能帮助你发现自己的不足,获奖了也能写在简历上还是不错的。高校刷算法的第五点呢,就是可以试着考一些证书。那这几年呢,有一个叫pat的计算机程序设计能力考试啊,越来越流行了。这个考试难度分为几个级别?乙级和甲级我都参加过,难度适中,虽然说这个证书的含金量啊,目前并不大,但是在你备战考证的过程中呢,你有一个更明确的学习目标,也会更有动力让你坚持下去。在我看来,刷算法的过程是远远大于结果的。
14:04
高效学算法的最后一点呢,就是要多看文章,其实有很多零碎的时间啊,大家也可以利用起来看一些推送啊文章之类的。比如我大二暑假坐高铁实习的路上,就是看小辉的漫画来学习算法。基本是五到十分钟一篇,那这个时间呢,不保证你能完全学会,但看了之后。最少能让你对算法有着基础的印象。时间啊,就像我脑袋里的水,挤一挤还是有的。想超过那些比你有天赋的人呢?就一定要利用好时间弯道超车。呃,聊完了找工作刷算法的方法呢?我们再聊一聊,想要成为算法竞赛大神,应该怎么刷题啊,当然这个话题我不够专业啊,所以就两三句话带过。因为老实讲,我只是大一大二的时候水落机场,简单的ACM算法竞赛,而且都没有拿到很好的成绩,但至少我可以很负责任的告诉大家。
15:07
算法竞赛的难度和训练强度不是一般的同学能承受的。想要拿到不错的竞赛成绩,至少要在以下任意一个平台刷着几百道题,而且你真的也需要一定的天赋,比如说数学啊,逻辑思维啊,英语等等,不然你会更累。那大家也可以直接在编程导航上搜索OG啊,就能够看到所有的OG。其实大部分都差不多。最后,什么时候可以停止刷题了呢?这个就要看你刷题的目的了,你是要找工作,还是要持续锻炼思维,提升自己呢?我身边的一些同事到现在还保留着刷算法题的习惯,但是对我来说啊,当我找到工作之后,我对算法的态度就像是仇人了,我不想见他,能不见就不见,虽然有点过河拆桥是吧?无论如何,刷题一定要拉长战线,养成习惯,每天最好固定一个时间坚持做几道题目。比如说我当时是每天早上还在床上躺着的时候啊,我就会拿出手机看一道题目,然后再闭上眼睛去思考一会儿,然后等我想到了解法之后,就睁眼起床开始敲代码,一气呵成。在睡觉之前也可以回想一下你今天刷的题目。
16:25
能够加深你的印象。还有一些朋友会问我说,我刷算法两个月能刷完吗?三个月能刷完吗?在这里鱼皮提醒大家千万不要急于求成,爆发性的刷题,而且除非你对你的算法能力很有自信,否则我建议大家在找到工作之前都不要停止刷题。好了,希望本期视频对大家有帮助,我是鱼皮,我秃了,你变强了吗?
我来说两句