如何在 LeetCode 上刷题?
大二学生,自学 C 语言,想在 LeetCode 上刷题,但是不知道怎么用,请大佬指点
这题我会,简直是量身定做的一个问题!
为了避免知乎大佬觉得我吹逼,先贴一下自己的 GitHub 地址,目前 70,000 star,全球排名 51 名。
https://github.com/MisterBooo
算法是一种技能,是可以通过科学合理的方式训练出来的能力。
在想刷题之前,得从心里认识到接受刷题很重要,才能坚持去刷题。
江湖有个传言:国内刷 LeetCode,最多够你吃 1 年老本;湾区刷 LeetCode ,够你吃 10 年老本了。
为什么湾区的刷题性价比这么高呢?
你想想,电面考 4 道题,一道题值 5 万!单位是 Dollar !
刷到就是赚到!!
想想是不是很刺激,有没有动力开始刷题了!可以提速刷题了!
就目前互联网的情况来说,无论是面国外大厂还是面国内大厂,如果想换工作都要去刷题,一面二面不丢你几道 Hard 题,都对不住你偷偷摸摸找个会议室假装开会实则面试的鸡贼。
同时,还得认识到一点,面试能力和你平时的工作能力其实差别挺大的。
有些人技术挺厉害的,但没有刷题,一面二面都过不了,而某些小镇刷题家,还真就靠刷题拿下了 Google、微软、脸书等大厂offer。
国内大厂也有这种趋势,比如字节,一大半都是面试题。
要不是他提前先看视频刷题,妥妥得凉凉。
所以,刷题很重要。
(PS:感谢大家耐心的阅读,算法是程序员的重中之重,必须攻克,大厂面试必考,顺便送一份阿里大佬刷Leetcode总结的算法笔记,如果你能吃透,那我相信80%的技术面试都会不在话下:
BAT大佬写的Leetcode刷题笔记,看完秒杀80%的算法题!
这本书的目录,非常经典:
刷题大概可以分为 4 个阶段。
1、纯小白,不知道怎么刷题,对很多概念都很陌生,各种数据结构和知识点几乎完全不懂,打开 LeetCode 第一题,满头问号。
有人相爱、有人夜里开车看海、有人 LeetCode 第一题都做不出来。
2、算法上基本已经入门,Easy 可以做出来,Medium 纠结半天也能有头绪,但基础不牢,比如字符转字符串还得 Google 一下。
3、刷了几百道题后,总结了自己的解题模板,参加周赛有时候甚至可以全部完成。
4、开始以 beat 100% 作为 AC 的目标了。
就目前的算法面试大环境来说,能达到第二阶段,中小公司可以应付过去了,到达第三阶段,字节、腾讯算法面试环节妥妥没问题了。
怎么样到达第三阶段?
给一下我的一些小建议吧。
1、如果目标是国内大厂,那么一定要刷足够的题,不需要把 LeetCode 上 2500 道算法题都刷完,但至少刷 200 道算法高频题,这些高频题我都写了题解同时也录制了视频,
在这个链接总结了:https://www.algomooc.com/1659.html
2、面试前一周以看题为主,因为刷题也刷不了几题,多看看自己总结或者别人总结的模板,比如回溯算法模板,掌握后,几十道回溯题都不在话下。
一些模板:
回溯,不难!3、刷题过程需要注意难度要循序渐进,算法训练是一个系统工程,需要循序渐进,太过于急功近利,反而容易因做不出难题而产生挫败感,带来反效果。
如果你本身有基础,熟练度高,那你刷简单的 LeetCode 应该是几分钟一题,几分钟一题的,花不了你多少时间。
如果你刷简单都花费很长时间,说明熟练度不够,就更应该从简单开始,然后过度到中等,再过度到困难。
并且,目前国内大厂的算法考察,基本不会超过 LeetCode 中等难度,上限难度基本都是 LeetCode 中等题里面的中等难度,所以不要太去纠结难题怪题偏题。
把高频题掌握就行了:https://www.algomooc.com/1659.html
再退一步,如果你觉得 LeetCode 的题目太难,可以先从《剑指 Offer》上的算法题开始学起。
为了帮助大家更好的入门学习算法,经过半年的积累,我给大家卷了《剑指 Offer》系列的三十道题目,结合动画的形式录制了视频,相信能帮助你更好的刷题。
领取地址:
当《剑指 Offer》上的题都变成了动画4、按算法分类来选题,比如一个时间段,只刷链表题,刷得差不多的时候,接下来再刷二叉树的题。
这样做有几个很明显的好处。
一、持续地刷同个类型的题目,可以不断地巩固和加深理解,可以总结出自己的思考路径或者解题模板。
比如链表题目,就会去思考虚拟头节点、双指针、快慢指针。
二、可以更全面地接触这个数据结构,算法的各个变种,这会促使你对这个数据结构,算法的理解更加全面和深刻,学习的效率会更高。
我一直认为读书是世界上性价比最高的成长方式,书很便宜但分量很重,是让我们摆脱平庸走向卓越的方式之一。
对于计算机专业的学生而言,读计算机经典书籍不光能让你快速提升知识和能力,更会让你在校招之际如虎添翼。
书籍下载:计算机必看经典书籍(含下载方式)
下面这是一个高赞回答合集,建议大家点赞&收藏,Mark住别丢了,大学期间绝对用得上。
1、怎么学好数据结构,看下面这个回答,已经获得了 21000+ 的赞和 50000+的收藏。
怎么学好数据结构?2、如何系统地学习算法,看下面这个回答,已经获得了 11000+ 的赞和 26000+的收藏。
如何系统地学习算法?3、一份适合新手的算法刷题笔记,已经获得 4000 点赞和上万收藏。
程序员吴师兄:无意中发现一位大佬的算法刷题 pdf 笔记4、谷歌工程师的 LeetCode 算法笔记是怎么样的?
程序员吴师兄:谷歌工程师的 LeetCode 算法笔记是怎么样的?5、大家一般刷满 500 道 LeetCode 题目要花多久?
大家一般刷满500道LeetCode题目要花多久?6、如何系统地学习 C++ ,这个回答能帮你找到路线。
如何系统地学习 C++ 语言?7、想要准备 Java 面试,那么这些面试题必须掌握。
Java 面试都只是背答案吗?赶紧点赞和收藏吧~
一天100道这个,LC刷个5-7遍,当年我刷题一开始LC才300多题,基本一半题目吧,说一个题号我都能说出哪道题,太熟了,后面慢慢涨起来都做,基本每天都刷,大概坚持了两年半左右吧,我当年留学的时候是每天凌晨4-5点回家,坚持了两年半,大概每天刷题8小时以上是肯定,翻来覆去不到1000道题,这时候你一天再刷LC题,100题很多都是打字,但这种刷题方式不会持久,试了两天就算了,因为没意义,当时就是想看看自己一天能做多少,知道了100以上就可以了。所以那印度老兄天天和我写白板刷LC,一天150我信。
智商一般,付出一样努力都可以做到。
国内会有人质疑字典树,线段树不考,我说的是北美CS求职,不是国内,北美16,17的面经,线段树考的频率,即使是现在字典树都是必会题目,算是中频题目,follow up经常出
共勉~
作为一个专业刷题培训班老师,这个问题涉及到我的专业了,来答一下~
第一遍刷题吃力非常正常。
当年自己第一遍刷的时候,特别痛苦。一天就3道题,持续了两个月吧。后来刷的多了,一天5道,再往后,一天10道,15道。刷了两遍后,一天可以30道也不累。以现在的水平,可以一天100道。毕竟很多题刷的太熟了,就是在打字。
简单说一下我认为的刷题几个阶段,这是上课时和学生说的:
1,第一遍:知道。直接看答案,不要自己想,了解所有最优解,方法技巧第一。做题套路,以印象为主。2,第二遍:熟悉。过easy题,记住;做medium,重点题背,反复背。最简单会,大多不会。记住做题套路,以记住为主。3,第三遍:做题。做easy题;做部分medium题,hard题有思路。夯实medium基础。熟练运用做题套路,以做题为主。4,面经:做面经,开阔思路,了解出题形式。基础决定上层建筑,基础牢轻松,不牢就痛苦5,第四遍以上:刷题。其实我感觉,在前4个阶段,都不叫“刷题”,那是做题,在学习,只有在第四遍,才叫刷题。没有人一遍就会,大多数人都向快。直接做题,不管不顾基础知识。很多人连Segment Tree,BIT,Trie,Union Find这种数据结构都不懂,遇见就刷,自己想,怎么可能想的出来?
所以刷题最重要的,第一步,就是了解所有的数据结构,做题方法,基础算法。从基础数据结构HashMap,HashSet,到TreeSet,TreeMap,Deque,LinkedHashMap;到各种对刷题来说的基础算法,各种排序算法,DFS,BFS,Sliding Window,sweep line,等等。99%的人这些都没有学过,就直接做题,做两道就想类似的题自己能做出来。
如果刷题这么容易,那人人都能进Facebook,Google了。
不可能的。我告诉我学生的方法,第一遍就是看答案。在第一遍刷题的时候,很多题其实是一类方法,但自己做的时候并不知道,然后自己做不出来就感觉挫败,其实是方法不对。所以在第一遍的时候,就是在看答案,最优解,去知道什么是刷题,理解所有的算法,原理,套路。建立一个较为完整的刷题思维体系。这样才能在遇见不会的题,想法思路才能正,才能有感觉最优解的方向,否则想一上来做几个题自己就知道最优解了,不可能的。
这里多说两句。很多人反对第一遍刷题看答案,认为就是自己做。当年我第一遍刷题的时候,举几个例子。
LC 76 怎么想都想不到,看答案感觉这解法真厉害,做多了才发现,有一种方法叫Sliding Window。
LC 56,看了答案才知道,还有个扫描线算法。之前想了那么多,都是错误的方向。
LC 200,看似简单的dfs,bfs,最后才知道flood fill。。。
LC 215,quick select
这种情况我相信每个人都遇见过,还有数据结构不好时,TreeMap都不知道是啥,PriorityQueue也不知道怎么用,LinkedHashMap,没听过。
所以现在回想起来当年第一遍刷,感觉费了那么多时间想这些,真的是浪费时间,因为想题想思路是重要的,但不应该把时间花在想的是这些已有的固定方法数据结构上,如果做这道题之前就知道了数据结构,知道了算法,那么我至少应该有个想的方向。即使想错了,也能说,啊,这个问题应该用sliding window啊,而不是发现,哎,还有个这样的方法!还有这种数据结构叫TreeMap!
就像学数学,知道1,2,3,不知道4,5,6,那怎么能算出2+5呢?
至少也应该把10个数认全再算加减乘除吧!
所以我认为浪费时间在这个补基础的点,不值。
与其这样,还不如第一遍就看答案,以题带练,带补,学习人家的最优解,建立思维体系,补数据结构,补算法知识。而第二遍时,才是真正自己想。这样做,一点不耽误锻炼思维过程,锻炼逻辑基础。这是我刷了这么多题感悟到能最快刷题的方法,现阶段我认为没有之一。
而第二遍就是要自己想了,第一遍已经有了思维,现在就是要培养自己的做题能力了。很多题第二遍看感觉自己以前没做过,正常,没人能一遍记住。但这遍就需要自己先写答案,因为你很多已经有了大体的方向感和目标,自己多多少少能写出来一些。然后这边尝试自己写,加深印象。
第三遍就是再过一下,再熟练所有套路,就需要牢牢记住。第四遍我认为需要脱离lc,需要做面经了,看看公司面试是怎么出题的。如果你的目标是北美找工作的话。
另外不建议刷800,主刷前400,就够用了,毕竟,前400能刷完的,理解的了的,10中2-3个人而已。
其实这些东西说起来容易,做起来很难。 每一遍其实都挺痛苦的,需要一个循序渐进的过程。我不是什么天才,我到现在的水平,基本上全职刷题,上课只是副业,8-9个月的时间。以数量来看,留学两年多,刷题过3000。不重复的题,就做过过千了。后来我把lc前400题所有题解法录成视频,录了近半年。所以不是看到一个人刷题厉害怎么聪明,而是踏踏实实的努力。
毕竟最快的捷径,就是没有捷径。
当然也不是每个人需要做到这种程度。公司面试题,很多题难度不是那么高,很多人2,300最后运气好也进去了。但如果想看到一道题就有思路,就能写出来,想有这种硬实力,我认为,最少需要4,5个月的时间。
我也见过那种,天赋异禀的,有那种只刷了100多的,聊天发现想法特别正,我感觉自己两遍才能有那些总结过的想法。还有那种,交流能力极强的,60多,各种店面过,各种要hint去交流暴力解过的。但自己也说这样onsite肯定不行,也就是店面而已。
这是我写的Leetcode 分类顺序表,每道题按先易后难顺序划分,初学者照着刷,效率会高非常多:
Leetcode 分类顺序表:
LeetCode 分类顺序表【专注于北美CS求职,已将上千北美学子送进FMAG公司~欢迎私信了解~】
刷100题=别人刷300题的超牛窍门来啦!北大学霸教你三倍速实现高效刷题!
在力扣刷题相信大家都会,但刷题有没有技巧,如何高效的提高自己呢?
如果你是一个对基础算法和数据结构完全不懂的小白,那么在刷 LeetCode 之前,建议先学习一下基础的「数据结构」和「算法」知识,这样在开始刷题的时候才不会那么痛苦。
基础的「数据结构」和「算法」知识包括:常考的数据结构:数组、字符串、链表、树(如二叉树)等。
常考的算法:枚举算法、递归算法、分治算法、回溯算法、贪心算法、动态规划等。
讲个笑话,从前有个人以为 LeetCode 的题目是按照难易程度排序的,所以他从「1. 两数之和」开始刷题,结果他卡在了「4. 寻找两个正序数组的中位数」这道困难题上。
LeetCode 的题目序号并不是按照难易程度进行排序的,所以除非硬核人士,强烈不建议按照序号顺序刷题。如果是新手刷题的话,推荐先从「简单」难度等级的算法题开始刷题。
等简单题上手熟练之后,再开始按照标签类别,刷中等难度的题。中等难度的题刷差不多之后,可以考虑刷面试题或者难题。 LeetCode 官方网站上就有整理好的题目不错的刷题清单。
可以先刷这里边的题目卡片。还有相应的面试题和竞赛题,如果大家想知道按什么顺序刷题,可以看以下目录
推荐刷题顺序和目录如下:
1. 初级算法
2. 数组类算法
3. 数组和字符串
4. 链表类算法
5. 哈希表
6. 队列 & 栈
7. 二分查找
9. 二叉树
10. 中级算法
11. 高级算法
12. 算法面试题汇总
LeetBook 也是非常好的刷题清单:
当然还可以通过官方新推出的「学习计划 - 力扣」按计划每天刷题。
简单来说,可以分为 5 条:
五分钟思考法重复刷题按专题分类刷题写解题报告坚持刷题五分钟思考法
第一个技巧是「五分钟思考法」。「五分钟思考法」的意思是:如果一道题如果 5 分钟之内有思路,就立即动手写代码解题。如果 5 分钟之后还没有思路,就直接去看题解。然后根据题解的思路,自己去实现代码。如果发现自己看了题解也无法实现代码,就认真阅读题解的代码,并理解代码的逻辑。
这种刷题方法其实跟英语里边的背单词过程是类似的。
一开始零基础学英语的时候,先学最简单的字母,不用纠结为什么这个字母这么写。然后学习简单的单词,也不用去纠结这个单词为啥就是这个意思,学就完事。在掌握了基本词汇之后,再去学习词组,学习短句子,然后长句子,再然后再看文章。
而且,在学英语单词的时候,也不是学一遍就会了。而是不断的重复练习、重复记忆加深印象。
算法刷题也是一样,零基础刷题的时候,不要过分纠结怎么自己就想不出来算法的解法,怎么就想不到更加高效的方法。遇到没有思路的题目,老老实实去看题解区的高赞题解,尽可能的让自己快速入门。
重复刷题
第二个技巧是「重复刷题」。
算法题有时候一遍刷过去,过的时间长了可能就忘了,看到之前做的题不能够立马想到解题思路。这其实还是跟背单词一样,单词也不是看一遍就完全记住了。所以题目刷完一遍并不是结束了,还需要不断的回顾。
而且,一道题目可能有多种解法,还可能有好的算法思路。
最开始做的时候,可能只能想到一种思路,再做第二遍的时候,很有可能会想到了新的解法,新的优化方式等等。
所以,算法题在做完一遍之后遇见不会的,还可以多刷几遍,不断加深理解。
按专题分类刷题
第三个技巧是「按专题分类刷题」。
在上边「3. 刷题顺序」我们给出了刷题顺序和目录。这里的刷题顺序其实就是按照不同分类来进行排序的。
我们可以在学习相关算法和数据结构知识时,顺便做一下该算法和数据结构知识专题下对应的题目清单。比如在学习完「链表」相关的基础知识时,可以将「链表」相关的基础题目刷完,或者刷官方 LeetBook 4. 链表类算法中的对应题目。
按照专题分类刷题的第一个好处是:可以巩固刚学完的算法知识。如果是第一次学习对应的算法知识,刚学完可能对里边的相关知识理解的不够透彻,或者说可能会遗漏一些关键知识点,这时候可以通过刷对应题目的方式来帮助我们巩固刚学完的算法知识。
按照专题分类刷题的第二个好处是:可以提高刷题效率。因为同一类算法题目所用到的算法知识其实是相同或者相似的,同一种解题思路可以运用到多道题目中。通过不断求解同一类算法专题下的题目,可以大大的提升我们的刷题速度。
写解题报告
第四个技巧,也是我觉得最有用的技巧是「写解题报告」。
刷算法题,有一个十分有用的技巧,就是「写解题报告」。如果你刷完一道题,能把这道题的解题步骤,做题思路用通俗易懂的话写成解题报告,那么这道题就算是掌握了。这其实就相当于「费曼学习法」的思维。
这样,也可以减少刷题的遍数。如果在写题的时候遇到之前刷过的题,但一时之间没有思路的,就可以看看自己之前的解题报告。这样就节省了大量重复刷题的时间。
坚持刷题
第五个技巧,也是最后一个技巧是「坚持刷题」。
算法刷题没有捷径,只有不断的刷题、总结,再刷题,再总结。千万不要相信很多机构宣传的「3 天带你精通数据结构」、「7 天从算法零基础到精通」能让你快速学会算法知识。
学习算法和数据结构知识,不能靠速成,只能靠不断的积累,一步一步的推敲算法步骤,一遍又一遍的理解算法思想,才能掌握一个又一个的算法知识。而且还要不断的去刷该算法对应专题下的题目,才能将算法知识应用到日常的解题过程中。这样才能算彻底掌握了一个算法或一种解题思路。
根据我过去一年多和小伙伴们一起刷题打卡的经验发现:那些能够坚持每天刷题,并最终学会一整套「基础算法知识」和「基础数据结构知识」的人,总是少数人。
大部分总会因为种种主观和客观原因而放弃了刷题(工作繁忙、学习任务繁重、个人精力有限、时间不足等)。
但不管怎么样,如果你当初选择了学习算法知识,选择了通过刷题来通过面试,以便获取更好的工作岗位。那我希望在达成自己的目标之前,可以一直坚持下去,去「刻意练习」。在刷题的过程中收获知识,通过刷题得到满足感,从而把刷题变成兴趣。
希望大家能够一起坚持刷题,争取早日实现自己的目标。
不建议使用 C 语言来刷题,其中最主要的一个原因是市面上很少很少有使用 C 语言的题解,哪怕 LeetCode 官方都没有提供。
这就会导致有一些题目你看懂了别人的题解却无法自己用 C 语言写出代码来,这就效率很低了。
所以建议题主用主流语言刷题,比如 C++、Java、Python、JS、Go 这些都行,市面上相关的代码更多更齐全。
然后再补充一下如何在 LeetCode 上高效的刷题。
高效的前提就是寻找出需要刷的哪些题目来,因为 LeetCode 上面有 2000+ 道算法题,全部刷完很难很难,也不建议,如果只是为了通过算法面试,熟练掌握其中的 200 道左右就够了。
至于是哪些题目,可以查看我下方的这篇文章。
程序员吴师兄:LeetCode 刷多少题能进大厂面试?如果你习惯看视频学习,我在 B 站也录制了大量的免费视频,可以观看学习:)
吴师兄学算法的个人空间-吴师兄学算法个人主页-哔哩哔哩视频