算法题越做越没信心

2020-05-11 13:27:28 +08:00
 supremacyxxxxx

最近每天都在刷算法题,每天一两道,已经刷了接近一个月了,现在做一些题还是很多做不来,看题解也觉得不太好理解,总之就没啥正反馈,越做越不耐烦。唉,这到时候秋招可咋整。想问问各位有啥好的刷算法题的建议吗

4690 次点击
所在节点    程序员
24 条回复
jones2000
2020-05-12 14:15:08 +08:00
@yazoox 就比如说吧, 你是学前端的,哪你可以看下 esprima 这类语法解析器的代码(这些代码量不大)+编译原理的书,然后自己尝试写一个, 在你动手写的过程中,就有遇到很多问题,一个一个解决,这比你刷题要来的有用。
MongkeMary
2020-05-27 06:47:06 +08:00
哈哈,我也曾经有同感啊。我是今年二月开始刷的,到现在刷了 500 多吧。中间也有一段时间特别没信心,觉得啥题都不会,但是慢慢熬过去了那个瓶颈期,后面就越来越好了。

我自己总结,不会做题有两种情况:
1. 题目背后的知识点不会
2. 知识点会,但是没有看出来这道题可以用这个知识点做


对于第一种情况,对于这两种情况,最好的方法都是“专题训练”。我是这么做专题训练的:

1. 每次针对性的选择一个知识点,比如我之前最怕的单调栈 /队列,先把背后的原理搞懂。这个阶段可以借助于教材,教程,博客,以及 LeetCode 的讨论区总结(这个是一个被低估的宝藏,里面很多人做了非常不错的总结)

2. 搞懂知识点后:找一个非常典型的题目,一定是那种一眼就看出考察知识点的题目来做。这个题目要精做,从最开始的简单的方法 brutal force 开始,一点点优化,最后用到刚学的知识点(单调栈)。

3. 然后最重要的来了,不要做完之后就跑了去下一题了。一定要仔细揣摩为什么这道题可以使用这个方法,用其他的方法不行吗?这个方法有什么独特的优势吗?这种优势有什么条件吗?比如题目如何改改之后,这个方法还是最好的吗?这些问题一定要想清楚,才能从根本上理解这个算法。

4. 再然后就是解决问题二了。如何办吗?还是“专题训练”。找大量类似的题目,先从容易识别的入手,慢慢过渡到不是那么容易的,再到隐藏很深的题目。看看都是什么情况下可以转化为此方法。

经过这几个阶段的练习,这个算法才算是基本算是掌握了。当然,人脑的特点就是,忘得快。所以,即使总结心得体会,后面没事常翻翻。常常是你想了半天也回忆不起来的东西,看看当时的笔记就瞬间清楚了。

希望我的经验对你有帮助,加油💪🏻
MongkeMary
2020-05-27 06:56:56 +08:00
@MongkeMary 还有一点忘记说了,“专题训练” 既是内容上的,更是时间上的。

内容上的,就是上个帖子,把类似的题目集中学习、揣摩、训练。这是按照 “知识点” 来划分,而不是大致的“类比”,比如 array, string... 这样的分类过于宽泛,很容易在练习过程中碰到不同的知识点,导致自信心不断受挫,本来可以学会的也搞不定了。集中火力仅供一个知识点,不仅敌人相对可控,自己也会有很多的信心,比较容易坚持下去。

时间上的“专题训练”是指,要抽出一定的时间,排除一切干扰,专心做这个事情。我们从小的学习就存在一个误区,所谓的每天一个单词,几年后你就是专八的词汇量。实际上,这样你永远也学不好英语。学习心得只是,一定要集中时间精力,在最短的时间内突破,然后你可以“每天一道题”这样保持手感。但是开始学习阶段,每天一道题绝对是大忌。

说到底,就是 “集中优势兵力,歼灭敌人有生力量”, 因为 “伤其十指不如断其一指”。切忌搞成了 “添油战术”。
supremacyxxxxx
2020-05-27 11:40:05 +08:00
这里统一回复一下,感谢各位给出的建议!
也希望自己能熬过这段时间。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670499

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX