注册一亩三分地论坛,查看更多干货!
您需要 登录 才可以下载或查看附件。没有帐号?注册账号 
x
因为不能理解队友刷题的痛苦,所以自己亲身体验了一把刷题网的艰辛,结果发现其中确实有一些窍门,但是更多的是体力和坚持。敬佩能够潜心刷题的大家,坚持体力活真的不容易。当然,最重要的是不讨厌coding,保持刷题的初心(无论是为了钱还是为了爱好还是为了周赛的小成就感),把刷题变成自己喜欢(或者不讨厌)并且无压力的事情,相信会有更多的收获。写这个帖子是因为有好友问刷题经验,干脆就总结一下,各位看官权当茶余饭后的八卦新闻,看个乐子。如果能加个大米,那就在此多谢了!
背景:主业ds,最开始是什么数据结构都不懂,(以为数据结构是db schema),经过半年,现在基本数据结构框架清晰,可以轻松讨论dijkstra, dp,看了下地里面经,大部分都能快速应对的水平。
转码刷题如何开始?
打开谷歌,搜索常用数据结构,然后读一下geeks for geeks或者任何免费coding tutorial里面关于每一个常用数据结构的解释,这一步主要是搞清楚有哪些数据结构,每一个数据结构的使用场景,优劣,以及big O。不要在这里太抠细节,重在对每个数据结构有intuition。
除了数据结构,还有常用算法,比如bfs, dfs, recursion, dp了解一个大概。
第一遍刷题
用leetcode tag,对每一个数据结构做针对性训练,这一遍可以直接做medium( medium不少题是可以用多个数据结构解决的,所以当你在不同的tag下面都看到这个题的时候,很容易就会建立起来直观的每个数据结构的优劣,easy的题思考的余地比较小,做这些题进步的速度太慢),每个tag下面做20题左右,可以做慢一点,但一定要理解每个题是怎么做的,在知道答案的情况下,可以写出来code, edge case在这里不是特别重要,了解即可,不要硬扣。
第二遍刷题
用leetcode company tag,刷你心仪的公司考过的hard +medium题,还是按照数据结构刷,每个结构刷20题,这里主要是刷hard, medium是为了调剂hard的挫败感。这一轮会非常困难,可能一天只能做一个hard。确保hard的思路清楚,大概框架能写,不需要追求AC solution.这一遍主要是通过hard把各个数据结构串起来用,大部分hard题除了analytics难一点,很多就是结合了好几个数据结构,或者是bfs+dfs, multiple bfs, 这种,所以重要的是,培养自己拿到题以后,能快速想到思路,用那几个数据结构。
学有余力的同学,也可以在这里多学几个算法和不常考的数据结构,有些问题用特殊的数据结构能一次到位,如果不用,就需要用多个数据结构联合解决,多了解一些“奇怪”的知识,比较有利于下一轮刷题的融汇贯通。
再warn一下,这一轮会有点痛苦,刚开始做hard经常有brain dead的感觉,但是如果看懂了一个hard就会有豁然开朗的感觉,理解会是这一步的关键词,看懂算法比真正能写出来要重要。而且一旦看懂了hard以后,很多medium就迎刃而解了。very steep learning curve but you'll find yourself improved greatly.
第三遍刷题
还是刷上一轮的题,这时候可以引入心仪公司近期的面经了,这一轮降低hard题的比例,提高medium题的比例,重点在于有思路,并且能够implement code,同时要开始总结属于你自己的coding template.在总结template的过程中,你就会发现数据结构也都是融汇贯通的,recursion, dfs, top-down dp都是一个思路,bfs for tree and graph traversal, dijkstra, bottom-up dp都是一回事。这一轮需要重点注意implement code和edge case的考虑,确保思路能变成code.
进阶一点就是除了能做出来一个题以外,也可以开始考虑每一个题有多种解法了,注意在前面几轮我们只求会做,但是在这一轮要追求有多个思路解决同一个问题,同时分析各个思路的利弊,leetcode 论坛上经常有各种解法,买个会员也可以看答案里面的各种解法,对串通各个数据结构的理解特别有好处。
最后,在临近面试的时候,多看看面经,差缺补漏一下就差不多了。注意每一轮刷题的重点并不是要背下答案,你只需要背你自己的coding template,而对于题目,你需要保证自己每次看到题,都能有思路,硬性背题不是解决问题的方法。
其他的tips:
如果刷题中间看不懂怎么办?问youtube,看各个博主的讲解视频,我发现看别人讲,理解比自己看快,后来懂了以后自己看答案才开始快。博主也很多,大家根据自己的喜好选择就好了。
如果刷不下去了怎么办?找两个做过的medium题,再做一遍,很快就又有信心了
最后,刷题是体力活,贵在坚持,希望大家都有自己明确的目标,不论目标是什么,只要坚持下来,你都能成为刷题大神。
*体力活不是说题做得越多越好,而是说做到每个数据结构和常用算法都了然于心,就可以了,毕竟我们训练的是解题的能力,而不是背题机器。
*转码也建议看一下system design,了解一下自己喜不喜欢这个行业。。。。后来发现system design对自己的工作太有指导性了,起码能跟engineer用同一种语言交流了。。。
|