讨论/综合讨论/刷题刷到绝望该怎么办?/
刷题刷到绝望该怎么办?

刚开始刷,有些题还会,越刷越不会,刷一题错一题,一题要想好久,看着题解也是一脸懵逼,一个是这方法根本想不到啊,一个是这啥方法啊,看不懂啊!!

求大佬支招,该怎么办?

极度怀疑自己智商,快自闭了。。。。

展开讨论
共 15 个讨论

不是大佬。我个人觉得刷题和智商没有太大的关系,刷题这件事情本身也是需要「方法」的。

我们针对算法面试准备的算法题,不是智力题,我们觉得刷题有困难,有很大一部分是心理上的因素。其实这一类算法问题非常像我们初高中的数学问题,知识点很多,都有相对固定的思考方向和常考的知识点,答案和思路也是相对固定的。

刷题这件事情我觉得一开始以培养兴趣为主,从易到难做,同类问题一起做(按标签)做,是我看到的绝大多数朋友刷题的方式。

「力扣」的「探索」模块就是适合入门的地方。你可以从「数组」「二分查找」「字符串」「链表」这些模块开始做起,这些模块需要的基础知识较少,并且「探索」板块本身就是一个小的教程。通过知识讲解和练习是可以掌握这一类问题的通用的做法的。

  • 刷题建议

做题的时候需要先仔细读题,把题目中的文字描述细节和示例看一下,然后再看看输入数据的范围,确保自己明确了题意以后想思路,然后再编码。

编码遇到问题,测试通不过是非常正常的事情。这个时候首先思考是不是本身思路上就存在问题,可以根据不能通过的测试用例,检查自己的思路在哪一方面没有考虑周到。如果是思路正确,那就是在编码实现的时候遇到的问题,这其实是比较考验耐心的。调试程序本身就是一种需要训练的能力,一个简单而有效的方法就是在程序的关键的地方,做一些 System.out.println(i); 之类的打印输出,观察数据是否按照我们所设定的流程执行下去。这件事情看起来枯燥,但是是作为程序员的基本技能,只能靠自己训练获得。

如果一道问题自己没有思路,完全可以直接看别人的思路。如果别人的思路看不懂,没有关系,看不懂就跳过。看不懂在一些情况下不是问题,不同的朋友表达的方式和语言不一样。写题解和博客的朋友不可能都从头开始写,每个人写题解的侧重点也不同,会假设读者有的算法和数据结构的知识也会不同。

看完别人的思路,觉得合理可行,再自己尝试编码。遇到问题再去比对别人给的示例代码。

即使是自己独立做完的问题,也很有必要在做完以后看看别人的思路,这一步也会让自己学习到很多。

  • 用好收藏夹

实在不懂又很想搞清楚的问题,不妨就放在收藏夹里,「力扣」本来就有提供收藏夹功能。也可以给自己刷题的 GitHub 仓库提交一个 issue ,把这道题和自己找到相关的参考资料写进去,提醒自己以后花时间去搞清楚。今天怎么想都不明白,过两天一下子就想通的事情也是常有的。因为有些时候学习和思考问题,个人的情绪和状态也是有关系的。

还有一些比较难的问题,一开始先别去碰,可以先看看题目的意思,不感兴趣就不做,感兴趣的话,不强求自己一定要做出来,就放在那里慢慢花时间搞懂,也是常有的事情,一道题可能重启 4 遍到 5 遍才搞懂是非常正常的,而且这样的问题如果最后自己真的搞定了以后是很有满足感的,力扣的第 4 题、第 5 题、第 47 题、第 41 题、第 300 题,第 42 题、第 84 题差不多就是类似的问题,即使是刷了很多遍以后,我都不敢说我完全搞懂了这些问题,就让它们在收藏夹里先吃灰叭。

  • 尝试表达输出,尽量用简单、通俗的语言描述自己的思路

在刷题的过程中,需要自己总结这一类问题的特点,然后用自己的语言表达,写博客、题解或者是和一起刷题的小伙伴讨论。这些虽然不是写代码,但也属于刷题的一部分,可以积累下来形成刷题的「数据」,以后不论是找工作还是自己复习都是十分有帮助的,我和很多小伙伴都是这么做的。

  • 养成好的编码习惯

刷题不是只有“数量”这个指标,即使是同样的思路,不同的人写出来的代码也会有很大差异。怎么写代码也是需要自己总结和训练的。代码格式良好,有恰当的、必要的注释,让别人能够很清楚地了解自己的思路,也是需要慢慢锻炼的。虽然刷题是个人行为,但是在写代码的时候按照写工程代码的标准来要求自己,我个人觉得是非常有益处的,我自己也是坚持这么做的,可以让自己避免很多坑和不必要的麻烦。

  • 不只是为了面试而刷题

刷题这件事情对于绝大多数朋友,也包括我,目标主要是在面试中得到一个好的成绩,找到一份好的工作。但刷题的过程是很值得经历的,从焦虑到欣喜,再到焦虑和自我怀疑,然后又莫名其妙自我感动,都是很正常的。

把「力扣」的算法题就想象成解决一个一个日常生活中遇到的问题,我们写的「算法」就是解决这些问题的方法,而「数据结构」是存储和处理数据的容器,是我们可以利用的工具,很多是现成的编程语言的函数库就提供给我们使用的。

  • 不要把刷题想得很难,很多时候只是心态的问题

刷题比起很多工作,例如机器学习里的公式推导、打一些数据挖掘竞赛、很多研究生朋友写科研论文,是要简单得多,甚至比起大家考研的时候学习的高等数学、线性代数、概率论与数理统计都要简单很多,要相信自己一定可以慢慢拿下的。

不要有太大压力,一道题做得出来做不出来,都不能说明太大问题,做对了有可能是侥幸,做错了也有可能是一时头脑短路或者是题目不对味口。

我有一位非常好的朋友,他是科班出身,听他说他以前刷题的时候,没有思路得去找学长讨论,LeetCode 当时还没有中文社区,看思路和题解、和别人交流得用英文。现在其实我们方便很多了。

刷基础算法问题和智商绝大多数情况下没有关系(刷 ACM 等竞赛题库除外),我个人觉得是和「态度」有关。可以想一想自己是不是认真地在刷题,参考资料和视频讲解手上都有,还搞不清楚,是不是自己花的时间不够,或者说没有找认真找合适的资料,或者就是自己想偷懒。

适合自己的刷题方式也是需要慢慢摸索的,一开始需要一些帮助和基础知识储备是必要的。后期就是查缺补漏,重点训练了。一开始不要过于执着一个问题,一个问题没有搞清楚,就放一放,问题很多,不可能全部做完,也不可能全部搞懂。自己需要合理分配时间和精力。

即使是「回溯算法」「动态规划」「贪心算法」「哈希表」「红黑树」这样高级的数据结构和算法,它们确实很复杂、很难,但是它们的基本思想是很简单的,或者说它们就是从一个很简单的样子一点一点变化,变成我们现在看到的这个样子,绝大多数算法思想都可以在我们的生活中找到对应的例子去理解它。

「力扣」的周赛其实也是很适合新手的,我现在想做的时候,也都会去做一下周赛,然后会和固定的小伙伴交流做题心得,有的时候也就是简单汇报一下自己做出了哪题,哪题实在想不出来,或者吐槽一下一些问题题目太长或者题意难懂实在不想做。有些朋友会误解我可能做那些问题会很轻松,其实不是的,我现在做周赛也就 2 题到 3 题,从来没有 4 题都做完过。头几次周赛一道题都没做出来就是我了。可以把每次周赛就当做是一次模拟的笔试、有很多小伙伴陪我们一起做,找找感觉,我想说的是,而且一定会有真·大佬出来,在「力扣」的「圈子」板块和题解区、评论区分享它们的做题思路和代码,在一些视频网站也可以看到他们的比赛实况和赛后讲解,讲得都非常不错,我们可以趁机向他们学习。

个人观点,仅供参考。

43

个人感觉是要多总结梳理背后算法的设计哲学,总结算法模型,才能做到举一反三和能力泛化,培养把实际问题抽象成特定的算法模型的能力,然后用简洁高效的coding方式对模型进行实现和求解,个人处于锻炼目的在这个网站做了1000+算法题,个人的感觉,大多数题目都能追本溯源找到本质一样的思维方式和算法模型,我觉得这必然并不是楼主智商问题,而是对算法设计不熟悉的人需要转换思维的模式,很多人一开始转不过来感觉到痛苦就放弃了或者是不肯投入时间精力冲破自己的瓶颈,这根健身或者其他体育训练一样的,锻炼就是长肌肉,流汗,不痛不累是不可能的,抽个筋崴个脚痛苦不也难免吗,人生里面能找到比较难的东西去征服来锤炼自己本来就已经够幸运了,身边不知道多少人浑浑噩噩待在自己舒适圈里面把自己技术生涯毁成渣渣了,楼主既然想学习就要坚持,翻过一座山就能看到更广阔风景,楼主加油,祝成功

5

都会的话还用刷题吗?。。你是抱着学习的态度还是想要直线通过的态度,学习的话是曲折的,顺风顺水的话根本没有进步不过是浪费时间。刷题就是熟能生巧,起码leetcode用不到智商,老老实实刷题就OK

2

感谢大家开导建议,不一一回复了,现在我已经调整好心态了,每天进步一点吧。

现在我在做二叉树相关的题目,就像楼上大佬们的建议,我先做了探索卡片,学习到了技能,现在正在刷全部的二叉树的题目,先从最简单的开始打怪。

同样就像楼上大佬说的,我刚开始好像没弄对,比较害怕看答案,但是确实,刚开始看答案并没什么不好,已经改正心态,实在思考不明白的就大胆看题解,跟着学习。

多总结,多思考,期待200题,加油!!!

1

加油😊

建议先补一下算法与数据结构知识吧,直接看你们大学的教材也行,看别的书也行,也可以看名校视频,理论基础有了再刷题会轻松一些
而且如果你是某一门语言的初学者,来lc是想练语言来的,那不建议刷lc,先多做做业务逻辑把这门语言练熟了再说

不要怕看答案,你一开始不会乘法是因为你没有学乘法口诀表啊。
算法题也有常见的自己的解题法,你现在才刚开始,不能用见一题就能解一题的目标要求自己
因为这些题目的解题方法你确实“还不知道”。
前期就像上面的大佬说的,你可以先做lc的探索卡片,至少先把技能学会了,然后再去打怪,或者打怪的过程中慢慢升级,
你可以把做不来题目然后看题解当做练级刷经验。

40题没感觉很正常啊,刷完100题就来感觉了。

那时候的感觉是,看啥题好像都会,但其实啥都不会,更绝望😂

刷不下去了,就找本书来学。学不下去了,就回来刷题看看学的成果。

推荐几本书吧。
《程序员代码面试指南》 Java的。
《算法竞赛入门经典》。3本,太厚了。可以哪里不会、哪里不熟悉,就只看哪里。

还有呢,就是多参加周赛喽。

你不是一个人,我刷中等题都困难。。加油吧,不要急躁,也不要浮躁。静下心来,这是一个积累的过程。。