新农上路
- 积分
- 99
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-11-11
- 最后登录
- 1970-1-1
|
注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号
x
这是本人刷了600+题之后才想到的,觉得我的这种刷题方法对我的提高还是比较有效的,分享给大家。1. 写完题目稍微过一遍,想想corner case之后,直接提交,不要用test case来检验程序。刷题和面试的目的不同,面试的时候目的是程序尽可能正确,所以要用test case来检验一下。但刷题的目的之一就是要暴露一下每个人评直觉写程序时容易出现的错误和死角,有的是思路上的,有的是习惯上的。我觉得我们写程序的时候,其实并不是真的面面俱到的想到了所有的可能性,从而确保程序bug free,而是经过大量刷题之后脑海中形成了某些套路。刷题的过程就是检验脑海中这些套路的准确性,以及适用范围。出了错误,正是调整纠正脑海中的错误套路的机会。
2. 每一道题都把犯下的所有错误标记出来,并给错误分不同的类别并一同标记。比如,我把所有的错误分成四类,这四类错误由难避免到容易避免来排列:
第一类错误:思路错误。就是说这道题的解法没有能够独立想出来,看了答案才会写。或者说自己的程序写得太长,看了别人的解法有更简洁的写法。一般这种情况下,按照答案的思路重新写一遍,并且标记一下,这个程序是在看了答案之后重新写得。其实这个严格的说不能叫错误,不过我就把这种情形也和其他错误标记到一起了。
第二类错误:corner case错误,程序整体思路是对的,只是漏掉了某些特殊情形,这些情形一旦想到了,很容易改正(也就是说没有算法上的困难)。这种错误属于思维习惯上的盲点,是很容易反复出现的。比如parse带括号的算式的题目中,万一算式不带括号的情形等等。当复习的时候,这种错误是最值得回味并避免的。
第三类错误,算法具体实现时,出现的比较大的bug。还拿parse表达式举例,比如判断括号内的内容是否结束,忘了同时判断整个表达式是否结束。if语句只列举了一个条件而漏掉了另一个条件。这种错误也和编程习惯有关,很容易重复性犯的错误,很值得标记出来。
第四类错误,Oh-Shit错误。就是说,发现错误时,通常会大喊oh-shit的错误:)比如没有return结果,比如while(index < n)循环中,忘了index++等等。这种错误其实发生的原因往往是题目比较难的时候,大脑的大部分CPU都用来想解法了,留给coding的脑力不够导致的。因为错误本身比较愚蠢,即使标记出来将来也很难彻底避免的。但我发现如果标记一下的话,就会对这种错误有个印象,知道往往在什么地方容易出这种错误,以后写程序时可以有意识地去避免。而且,以后写完程序简单过一遍的时候,也会有的放矢地去查这些地方。
这样做,当复习时间不够的时候,可以比较有效率地重温一下刷过的题目。重新刷一遍刷过的题目以提高熟练度,当然是最好的方法,但当时间不够的时候,这种方法效果也很好。特别是第二类错误,我重温的时候,常发现还是漏掉了当初漏掉的情形。
|
上一篇: LEETCODE HARD在什么情况下才有必要刷?下一篇: 2019.6.25 leetcode最近6月最新的公司分类题库
|