也是让各位久等了好吧:
如果评分超50,阅读超100,下周将更新我的代码修仙之旅5
我是小学生,第一次发这么长的帖子,可能写得不怎么样,大佬们别骂我,我真的挺认真在写的。
第 3 篇我写到第一次被难题打败,也第一次明白读题的重要性。那之后我开始慢慢能做对一些稍微有难度的题了,但我很快又发现了一个新的问题——我好像只会“死做”。
什么意思呢?就是我看到一道题,脑子里第一反应就是硬写。如果是求从 A 到 B 的路径,我就把每一种可能性都试一遍;如果是统计某个区间里有多少符合条件的数,我就一个数一个数地数过去。这种写法其实并不是不能用,但它真的太慢了,稍微大一点的数据就能把我的程序卡得死死的。
我开始意识到“算法”这个东西的存在,就是在那段时间。
一开始我不理解什么是算法。在我看来,能跑出正确结果的代码就是好代码。直到我碰到一道题,用以前那种“硬做”的方法,怎么交怎么 TLE。我实在没办法了,就去看了看别人的代码。那是我第一次认认真真看别人的代码,也是我见过的最“高级”的代码。
那个人写得很短,甚至比我原来写的还短,但思路完全不一样。他不是从头到尾试一遍,而是用一种我完全没有想到的方法把问题分成几块,然后巧妙地算出来。我盯着他的代码看了很久,说实话,第一遍我看不太懂,第二遍也只看懂了一半。直到第三遍,我才终于搞明白他在干什么。
那是一种很奇妙的感觉。就像是你一直在用一把很钝的刀削苹果,突然看到别人用一把特别锋利的刀,一下子就把苹果切好了。原来事情还可以这样做。
那之后我开始刻意去学一些“高级”的写法。遇到了看不懂的代码,我会把它复制下来,一行一行地读,中间加一点注释,写一下它到底是在干嘛。一开始很痛苦,因为我连别人的变量名都看不懂,有些代码还会用很短的符号代替数组,比如 a[i + 1] 这种东西,我看一眼就能晕过去。
但慢慢地,我发现自己好像能看懂一些了。而且我发现,那些看起来特别高级的代码,其实底层还是那些基础的东西,只是它们用了一种更聪明的方式拼在一起。
我不再像以前那样害怕“看别人的代码”了。有时候我也会自己写一个暴力解法,然后跑一下,再看看别人的正解是怎么跑的,两者对比一下,就能发现自己写的到底差在哪里。
不过这也让我产生了一点小困扰。因为看了很多别人的代码之后,我发现自己写代码的时候,会不自觉地模仿别人的写法。有时候明明我自己也能想到一个思路,但一看别人写得更漂亮,就想去学别人,结果反而把自己绕晕了。
后来我觉得,看到好的写法当然要学,但最重要的是,得先有自己的想法。可以学别人的思路,但写出来的代码最好还是自己的东西。毕竟,做题的乐趣,不只在于最后写出来,还在于你脑子里那个想法的形成过程。
现在,我已经开始慢慢接触到一些以前完全没听过的东西了。比如前缀和、二分、排序,还有一些更复杂的结构。有些我能立刻听懂,有些我需要花很长时间才能慢慢消化。但我发现了一件挺有意思的事——我好像没那么容易害怕了。以前看到没听过的东西,第一反应是“这我肯定学不会”。现在虽然还是会觉得难,但至少我会想着去试一试,看看自己能不能搞定它。
可能这就是“学算法”和“学编程”不太一样的地方吧。学编程是让自己能写出东西来,学算法是让自己能写出更好的东西来。这两者我都还在学,也都还在慢慢进步着。
我想,以后我还会遇到更多看不懂的代码,也会遇到更多做不出来的题。但我觉得没关系,反正我还在往前走,总有一天,那些我曾经看不懂的代码,我也会写出属于我自己的那一份。
—— 我的代码修仙之旅 4,完。
我的代码修仙之旅 5,敬请期待
(我是小学生,很多地方写得不好,也没写出大佬那种感觉,但我写的时候挺认真的。希望能有人看到,也希望能有人告诉我哪里写得不好,我会慢慢改的。)



