12
返回列表 发新帖
楼主: burself
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] 每次刷题是不是一定要做到AC?

🔗
annawuyi 2016-8-15 20:37:01 | 只看该作者
全局:
请问楼主AC是什么意思?谢谢
回复

使用道具 举报

🔗
runrain 2016-8-15 22:09:29 | 只看该作者
全局:
这个问题就好像 每次做测试是不是要考满分 一样 哈哈哈
回复

使用道具 举报

🔗
sheepmiemies 2016-8-15 23:51:55 | 只看该作者
全局:
本帖最后由 sheepmiemies 于 2016-8-16 06:46 编辑
burself 发表于 2016-8-15 15:40
你说的有一定道理。我也知道不少ACM OJ选手对常用算法都是倒背如流的。但我觉得对准备面试来讲,还是要找 ...

LZ你这有点偷换概念,AC,最优解,倒背如流,这几个不是一个层次的。

AC,可能只是代表你刚好做出来了,(1)你的代码可能很冗长,(2)效率可能很低,(3)再做一遍你未必做的出来。
最优解,也可能只是代表你的方法big O最优,甚至少数题只是你见过的最优,还有可以优化的点,仍然可能精简/优化代码,并且隔一段时间再做一次你未必能想到最优解。
倒背如流,看似已经学到头了,但是也有, (1)假的倒背如流,也就是你遇到这道题,比如80%可以很快写出最优解并且bug free,但是follow  up完全懵逼, (2)真正做到理解题目思路,举一反三,遇到同一类型类似的题都能很快找到答案。

做题不仅是做题,是锻炼思维和培养习惯的一个过程,也是建立正确态度的过程,在你看来很弱智或者很平常的思路,在更high level的地方很可能仍然有举足轻重的地位。

个人建议,不喜轻喷。觉得LZ的态度需要改变一下:
1. 你觉得你花30分钟,解决了这么小的一个bug,不过是才AC,你就能倒背如流了吗?或者你觉得你花30分钟把一道easy,medium的题解决得倒背如流,遇到hard也能有同样的效率?
2. 仅仅这30分钟,你能了解多少系统架构?能付诸现实吗?会不会担心变成思想的巨人?
3. 写测试的时间都省了,也就是你懒得去全面地思考各种case,你工作中也是这样的态度吗?如果这样别人怎么可能放心你去架构?
4. 同样已经工作,确实觉得回家了不是很有学习的动力,但是时间挤挤还是有的。确实不同公司加班情况不太一样,这个因人而异;但是我们现在应该是可以大量利用碎片化时间来充实自己,想想可以怎么好好利用闲暇时间才是正道,而不是鼓励自己“能学习已经很难得了”。。。有时候(没太多加班的时候)可能是自己给自己的借口,放松得心安理得。
补充两点,个人认为这两点都不太可取:
1. (推荐LZ认真想想) LC的code一般不长,大多数在30~50行之内。这么小段代码,如果连typo或者一些mismatch这样的小问题都需要检查半个小时,是不是会被怀疑在以后工作中,在庞大的架构下debug都需要更长的时间?
2. 最优解的追求,就如楼下那位所说,是否要盲目去追求最优解?
(1) 如果最优解思路很明显,还是很有必要的,毕竟明显的思路大家都很容易想出来也不会花太多时间,从竞争的角度上说,也不会比别人差得太多,还是有必要的,就不举例了。
(2) 如果最优解太巧妙,超出了自己目前的能力,思考一下就好,开拓下思路总是有好处的,但是没必要花大把时间,mark一下以后回过头来看更有效率。
(3) 不要盲目追求代码极度简洁。。。。没有必要为了简洁完全舍弃可读性。
回复

使用道具 举报

🔗
runrain 2016-8-16 03:03:43 | 只看该作者
全局:
sheepmiemies 发表于 2016-8-15 23:51
LZ你这有点偷换概念,AC,最优解,倒背如流,这几个不是一个层次的。

AC,可能只是代表你刚好做出来了 ...

每次看您的点评都有十足的进步
回复

使用道具 举报

🔗
ladyM1896 2016-8-16 04:56:21 | 只看该作者
全局:
很多题目AC是不够的,好在现在LC可以看到自己代码的运行效率和别人的进行比较。如果专注于刷题进度,那么AC了以后如果运行效率基本和大家差不多的,我觉得就可以算这题pass了。

另外说点和楼上几位不太一样的吧,刷题毕竟是为了面试,所以应当以怎么让面试官认可你作为标准。我最近面了几个公司的体会就是,刷题够用就行了,有时候代码就算完成度很低,只要思路对了,面试官一样让你过,甚至评价还不错。(基于我G的电面的经验)。花太多时间追求最优不是一个很经济的做法。而且有时候题做得太顺,会让面试官觉得你无非是刷过这题,反而说你communication不行。举个例子,LC上的Stephen的代码长度基本都是最短速度最快的。仅仅是个人爱好做题没问题,但是面试的时候真的把这种代码写出来有点炫技的意思,代码不太容易读懂。确实也会看到有些人提到做得太快面试官出更难的题,直到被难倒为止。有时候面试官自己都未必对面试题很熟悉,只直到一两个解法,可能还搞不懂你写的代码。

不过楼主这个情况,首先copy paste是绝对不可取的。就我个人而言,做不出来的题目,看一下别人的思路,我也不会立刻去做,这个时候可能思路只是记忆性的,照搬别人的东西做完就忘了。我一定会做点别的题目,第二天再去做之前的题,这样可以尽量确保代码是你自己敲出来的,不是靠看别人的。
回复

使用道具 举报

🔗
sheepmiemies 2016-8-16 06:47:46 | 只看该作者
全局:
runrain 发表于 2016-8-16 03:03
每次看您的点评都有十足的进步

大家一起讨论一起进步!
回复

使用道具 举报

🔗
sheepmiemies 2016-8-17 00:03:09 | 只看该作者
全局:
burself 发表于 2016-8-16 21:37
好吧 我觉得你可能没有太了解我的意思。首先我发这个贴主要是想看看怎样能更加有效的利用时间,相信对其 ...

额,从你的回复来说,我个人主观上又有两点小看法,如果说得不好,请LZ就把我当成“对你有偏见的同事”来处理。
1. 你的表达一直在变,让人不知道从何去理解你的意思,挺影响沟通效率的。从你的原帖和回复的帖子,举例来说:
(1)“我觉得你可能没有太了解我的意思。首先我发这个贴主要是想看看怎样能更加有效的利用时间,相信对其他版友也有借鉴意义。”你的原贴只问了“刷题是否一定要AC”完全没有看出来“除了刷题,是否可以做其他事情效率更高”的意思。
(2)“这里就是你有偷换概念的嫌疑了。一道题多花30+分钟,3道题就是一个半小时。”你并没有告诉我,你每道题原来都多需要30+分钟啊。。。如果你说你一天三道题,"每道题都要多花30+分钟",我一定不会有偷换概念的嫌疑的。算上额外的时间,如果你每天刷三道题都要超过三个小时,那么省下来的时间学期其他东西是挺够的。然后如果(1)你刷题不是为了找工作 或者 (2)你觉得不用AC你面试也能过,那把时间拿去学更有用的东西,完全同意。同时,大家是在就事论事,讨论AC的问题,不代表只有你一个人回去看书读paper,这一点也不用操心。


2. LZ更倾向于接受两种观点,显而易见非常有说服力,或者和你的想法不谋而合。当然对大多数人来说多少都会这样。
(1)我觉得LZ还是没有认真看我的回帖,我强调的是"刷题不仅是刷题,更重要的是培养思维和习惯的过程",这里的思维习惯不仅仅是思维灵活,容易有新的思路,而且也是有查缺补漏归纳总结的习惯。寻求更好的解属于前者,而当AC都无法做到的时候,算不算学会了这个算法呢(这里不否认有些LC题有一些神奇的test case)?换句话说,当你看算法导论看paper理解了一种算法以后,你写不出来正确能run的代码,算学会了这种算法吗?AC,尤其是第一次AC,离倒背如流的距离还很远吧。30分钟的debug,不能让你做到倒背如流,这一点我也希望你明白。归纳总结不同的方法以及debug和test属于后者。然后如果LZ你认为你全凭思考心里有数不需要实际测试代码就能cover所有case,那ok,当我没说。
(2)你再次偷换了一个概念或者说转移了话题,不要把“创造算法”和“应用算法”的难度混为一谈。我们现在要AC的题,不过是在利用前人已经实现的算法而已,这一点上是没资格和别人相比的,不理解你举例的意义何在。
(3)渣实现不是你能决定的,写新模块还是维护旧模块在你不是老大之前也不是由你决定的,为什么程序员倾向写新模块还不得不去维护旧模块?为什么现在有各种版本的新浏览器,程序员还不得不去考虑老旧版本IE的兼容性?






回复

使用道具 举报

🔗
sheepmiemies 2016-8-17 02:53:27 | 只看该作者
全局:
本帖最后由 sheepmiemies 于 2016-8-17 02:55 编辑
burself 发表于 2016-8-17 01:50
>>”你的原贴只问了“刷题是否一定要AC”完全没有看出来“除了刷题,是否可以做其他事情效率更高”的意思 ...

我上一个帖子想要说的意思,仍然是我接下来要说的话:
1. LZ你之前的回帖和你后续表达的意思有出入,有一点影响沟通效率。
(1) 我并没有说你解释得不对,而是说你的原贴没有表现出"想要探索高效利用时间做其他事情而不仅是刷题"的想法,原帖你只是和大家讨论"是不是一定要AC"。
(2) 是因为你在强调我偷换概念的嫌疑,我的解释是"如果你每道题总是这样花额外30分钟的时间,确实你能够利用的时间会很多",这一点和你说十道题300分钟很多是一个意思,只是前提是你"总是要额外花那么多时间做一道题"。
(3) 你反问我"为什么程序员都倾向写新模块,而不是去debug现有的模块?",我的回应是,"在你不是老大之前,维护已有的代码很可能是必须的",没有get到你反问的点何在。
(4) "二分查找从被提出来到第一个正确实现被写出来,中间隔了10年时间。是那个年代的程序员不聪明么?"这一点上我真没看出来这个例子practice makes perfect的意思。


2. 我也从来没说过这个帖子歪楼/不应该在这个版面啊,我一直都说的是对刷题的看法而已,那我们回到以面试为目的:
(1) 之前的帖子我说过了,对一道题来说,AC,最优解,倒背如流是三个层次。而你说的熟练度,那是要追求最后一个层次了,比如有些人说的"medium的题,80% 一遍bug free",这里不是让你一遍bug free,而是debug出来AC这道题。AC都达不到,可能会被算作是没有做出题,不敢说所有面试官,但是大多数面试官的眼里,有bug的代码,是不能算做出来的吧?
(2) 你举例的那个刷题五遍的例子没错,所以我之前的回复就强调了 "刷题更重要的是培养思维和习惯的过程"。首先,基本的算法你能写出来,不一定要bug free,但是你有良好的习惯帮助你在短时间内debug出来;然后更厉害的是有灵活的思维触类旁通,面试中的各种follow up和变式都能逐渐找到思路得到答案。在面试中花很多时间debug,面试官的眼里有可能是red flag这一点没错吧?我相信至少一部分面试是没法通过"口述解法"通过面试的吧?就算知道再多的思路,会再多的架构,面试题写不好还是没法通过面试的吧?


再次强调一下,我说刷题是为了"培养思维和习惯",能够尽量快地接近答案,同时我说"良好的习惯去debug和cover corner case很重要",为了validate your solution,我认为这两点对通过面试很重要。我是认为需要"有意识地去提高",而不是"被动的提高熟练度"。同时我不认为逐渐养成良好的习惯之后,会“总是花30+分钟的时间才能找得出typo或者小bug”。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表