如何更好地刷题?谈谈我的一点看法

简介: 如何更好地刷题?谈谈我的一点看法

周末在地铁上刷知乎,看到个问题:「非计算机专业,想刷leetcode,请问在此之前需要做什么准备?」

https://www.zhihu.com/question/383250014/answer/2004466579

下面高赞回答主要分成了两个派系:

  • 有说按专题来刷的,不要盲目刷。
  • 有说就要盲目刷,不然没有新意和动力。

所以新手到底应该怎么刷题比较好?其实见仁见智,每个人的情况都有所不同,我在这里随便聊聊我的看法。

到底什么刷题顺序好?

以我的拙见,我觉得两种刷题方法都没错,只是应该分两个阶段。

  • 「第一阶段新手入门还是不要盲目刷题,老老实实按专题刷,巩固基础,追求的是知识的深度。」
  • 「第二阶段熟练了后,无论是为了增加新鲜度和视野,还是培养手感,都可以随机刷题,追求的是广度。」

以我自己的经历来说,我本科入学之前也是没有任何计算机基础的,只会基本的word使用吧,家里也是没有电脑的。但在高三毕业的那个暑假,通过自学两个月不到,基本入门了c语言。然后大一入学因为有点c语言基础,再加上数学比较好,就进了ACM集训队。那时候就是按专题来刷的,高斯消元、动态规划、贪心、树、图论等等等等。说实话,那段时间是非常枯燥的,就跟你高中一段时间连续刷解析几何一样,会把你做吐。但是也有个好处,就是熟能生巧,再碰到类似题目,你可以熟练的快速写出代码了。

等大多数算法学的差不多,你觉得够用了,就可以开始随机刷题了,这也跟高中刷卷子一样。这时候你就会将前后一个个孤立的知识点串联起来,形成比较系统的认知。这时候你可能会见到各种奇奇怪怪的题型,各种非常规的解法,这过程中能积累很多解题的经验。熟练了之后,你还会习惯思考一道常规题目有没有其他的解法,能不能用搜索来解图论或动态规划等等。

怎么更好地刷leetcode?

当然大多数人刷leetcode是为了找工作,或者为了考研,这时候肯定没有一两年的时间用来系统训练。所以这时候就得「切合笔试面试的场景,做出针对性的训练」了。那就要去调研面试常考啥题型,你说面试就20分钟给你做题,会让你做一个大图论吗?那大概率不会,除非面试官就想耗着你。那实际常考的肯定也都是代码相对不那么复杂,但是得动很多脑子的题目。比如动态规划,你想出方程的话代码也不会太难写。再比如贪心,你瞬间就能随便猜一个贪心方法,虽然大概率是错的。

所以我觉得leetcode上的题,「先刷常见专题」,dp贪心数据结构这种常考的多刷点,搜索之类的适当刷点,图论啥的见识见识,会点基础的就行,实在不会也不用浪费太多时间。

每个专题刷的差不多了之后,你觉得对自己很有自信了,觉得掌握的差不多了,那就开始随机刷。leetcode有个随机一题的按钮,我就是天天点那个刷的。还可以刷首页的热门100题或者剑指offer系列题,这些都是比较热门的题。虽然面试很少会考这种热门题了,但是重要的是掌握解题思想。

说完刷题顺序,再来说说刷题的时候需要注意啥。很多人看到一道题,想了没两分钟就说我不会做,我想不出来,然后就去看题解了。看完又说这么简单,我会了,然后代码也不实现一遍,直接去看下一题了。这样的后果就是,你以为你会了,但其实那是你看到题解后看懂了而已。而且那不是真的看懂了,你真的看明白了为什么那么思考吗?下次换了一道题让你自己思考,你还是一头雾水。所以我建议「自己先思考个半小时,千万不要看题解」,初期的时候两三小时都不为过,只有自己思考过了才能有所收获。当初我的ACM教练就禁止我们想一会儿就去看题解。实在想不出来了再去翻题解。

看别人的题解也有讲究,不是看一眼觉得你看懂了就不管了,而是要「把自己代入别人的角色」,想想他是怎么想出这个思路的,因为实际面试中可没人给你题解问你这是怎么做的,全得你自己想。想通之后,也别急着关闭题解。「自己去实现一遍」,看明白了和写的出来是两回事。你别看题解自己写的时候又会发现很多细节你还是搞不清,很多trick你都没有注意过。

还得「学会多思考一些解法」,很多题解给的解法并不全,你可能只会一种常规解法就不管了。其实仔细想想你会发现很多别人想不到的妙解,当然这需要在你每个专题都比较融会贯通之后。多会一种解法可以让你在面试的时候更加镇定自若,不会因为一种解法想不出来而直接放弃。

刷题不要光追求数量,还得「追求质量」。彻底弄懂一道题有时候比你看题解草草通过10道题有效的多。我去年面试前仔仔细细刷了100多道题,每道题都写了很多种解题方法,写了详细的推导证明过程,虽然我之前打过ACM,但也好几年了忘了很多,100多题认真做下来能让手感回来了。

相关文章
|
7月前
|
设计模式 运维 索引
【2023总结】谈谈文章背后的故事与思考
【2023总结】谈谈文章背后的故事与思考
|
2月前
|
测试技术
谈谈【软件测试的基础知识,基础模型】
谈谈【软件测试的基础知识,基础模型】
32 5
|
4月前
|
缓存 前端开发 JavaScript
深入探讨前端性能优化:从理论到实践
在现代Web开发中,前端性能优化已成为提升用户体验的关键因素。本文将探讨前端性能优化的基本理论,并结合实际案例,深入分析如何通过优化代码、资源管理和用户交互,显著提升网站和应用的响应速度。我们将介绍从理论到实践的多种方法,包括资源压缩、异步加载、缓存机制及工具的使用,帮助开发者构建更加高效和用户友好的前端应用。
|
7月前
|
UED
技术感悟:代码背后的思考
在当今数字化时代,技术已经成为生活和工作中不可或缺的一部分。作为技术从业者,我们常常陷入繁忙的编码和调试中,很少有时间去思考代码背后的深层含义。本文将探讨我们在编写代码时需要关注的思维过程,以及如何通过技术感悟来提高我们的编程能力。
|
搜索推荐 架构师 测试技术
谈谈讲清楚这件事的重要性
如何讲清楚一件事我相信很多人都很困惑也很无助,尤其是在晋升场合,在向上汇报或者是做大范围分享的时候,恨不得找个地缝钻进去。很多时候我们常常是这样安慰自己,我是实干派技术人,不需要那些花里胡哨的东西,我技术过硬比什么都重要。曾经一度我也是这样认为,最后改变我这个想法的是一句话:如果你讲不清楚多半是想不清楚,如果你都想不清楚如何能够带领更多人拿到结果?
1603 9
|
算法 JavaScript Unix
1024程序员节:谈谈自我感受
1024程序员节:谈谈自我感受
249 0
|
设计模式 分布式计算 算法
阿里面试官亲述:如何利用设计模式改善业务代码
在业务部门的开发中,大多数的我们在完成的业务的各种需求和提供解决方案,很多场景下的我们通过 CRUD 就能解决问题,但是这样的工作对技术人的提升并不多,如何让自己从业务中解脱出来找到写代码的乐趣呢,我做过一些尝试,使用设计模式改善自己的业务代码就是其中的一种。让代码变得更加简洁和提升健壮性,从代码中寻找一些欢乐。
阿里面试官亲述:如何利用设计模式改善业务代码
|
设计模式 架构师 NoSQL
从技术思维角度聊一聊『程序员』摆地摊的正确姿势
有人说程序员这个职业,三年升高工,七年做架构,十年送外卖。对此虽然我也曾非常认可,但现在我可以前瞻性(马后炮)地说四个字,杞人忧天!目光肤浅!正所谓天生我材必有用,用完再把外卖送,现在,新的风口——万亿【烟火经济】来了,除了送外卖我们又多了个新选择:摆地摊!一个人一辈子只有那么几次机会可能实现财务自由,机遇稍纵即逝,一定要牢牢把握住。
1047 0
|
设计模式 负载均衡 算法
从技术思维角度聊一聊,『程序员』摆地摊的正确姿势
有人说程序员这个职业,三年升高工,七年做架构,十年送外卖。对此虽然我也曾非常认可,但现在我可以前瞻性(马后炮)地说四个字,杞人忧天