|
最近phd快毕业了,焦虑找实习找工作持续了一年多,现在感觉快要迎来短暂的上岸期了,大概总结一下刷题相关的感悟,主要是自己总结将来反思用的。
地里类似的经验估计也不少,本帖很可能会有重复。Anyway,希望帮到有缘人,欢迎大家讨论。
刷题零经验或者不熟悉基础数据结构算法的需要先学习基础功,基础功达标永远是第一步。这个帖子重心在后面的阶段。
许多算法套路没见过就是很难想出来,见多了用多了自然就熟悉了,熟了之后才有可能在面试期间的高压环境下提出来。
涨见识这里就是常规的刷题。碰到一道题需要先自己想一想,然后尝试做一做。不管做出来与否,都要仔细看leetcode会员答案,熟悉一种或几种常见的最优解的思路,分析时间空间tradeoff。
涨见识阶段有个问题就是,算法这么多年里,奇技淫巧太多了,挨个学习过于费脑也花时间,所以这里建议第一次见到的技巧熟悉high-level idea,重复见到的技巧算法尽量熟悉掌握,尤其是重复出现而且想法简单的技巧,比如常规DP pattern,monotonic stack。
rolling hash之类的算法出现的少一些,但是想法简单,这种学起来也成本不高,可以考虑。
过完涨见识阶段大概碰到一个题会有基础思路,接下来建议专门考虑一下code smell,如何优雅的实现与解题。
这个对于bug-free很有帮助,也是我个人感觉区分入门与内行的一个重要分水岭。
聪明的初学者可以提出能用的解决方案,但懂行的人写简洁易懂的代码。
为了学习好的code smell,首先需要识别什么是好的代码,然后检查自己的代码寻找不够优雅的地方,看看别人是怎么做的。
这个阶段只靠leetcode editorial还不够,需要多刷一刷leetcode其他人分享的solution,寻找自己喜欢的代码。高手在民间。
过完code smell之后可以考虑研究hard怎么解题。
很多人觉得很多hard就是不可能在面试期间简单直接的整出来,当然有一定道理。
但刷hard的目的我觉得更多的是能轻松摆平medium,以及在有hint的情况下整完hard。这个阶段训练的是思维模式,如何入手hard。
我觉得对于hard题,找observation是核心。就像是推数学定理证明那样,发现一个核心的observation就解决了hard题一大半的路,随后围绕核心的observation设计算法。
问题是如何找observation。从brute-force入手是一个说烂了的,但好用的思路。
除此之外,可以手动推到一些test case,检查自己计算过程中有什么规律。
先提出猜想,再分析验证猜想是否成立。对于能在面试解决的hard,你只需要找到一个或者最多两个规律、observation就可以了。
这需要一个训练的过程,平时刷题就要多训练。个人感觉这个能力远比刷题更有意义。
observation还可以倒推寻找,从结果入手分析什么对结果有利。欢迎大家讨论有什么寻找observation的思路。
有了observation和大概的算法设计框架之后,建议先罗列high-level pseudo-code再动手写代码,避免过早陷入细节纠结。
有的时候明明有了想法但就是代码没法快速的写出来,这个时候感觉先罗列high-level会有帮助。
最后就是平时练习保持手感,或者多做总结保证需要的时候能快速上手。
祝大家都能尽早上岸,事事顺心!
当前新闻共有0条评论 | 分享到: |
|
||||||||||
评论前需要先 登录 或者 注册 哦 |
24小时新闻排行榜 | 更多>> |
1 | 彭丽媛已经没戏了?习被打脸 |
2 | 中共高干一致同意 豁出去赌一把 |
3 | 当年举报毕福剑的那位告密者怎么样了 |
4 | 华为新款手机采用5奈米?权威机构拆解爆惊人 |
5 | 俞建华吞枪自尽 竟为了保“他” |
48小时新闻排行榜 | 更多>> |
一周博客排行 | 更多>> |
一周博文回复排行榜 | 更多>> |
1 | 川普是人民选出的总统.就清除 | 木秀于林 |
2 | 从三毛到琼瑶 | 席琳 |
3 | 中美实力比较和对抗前景 | 山货郎 |
4 | 中国发电量超过美国2倍,为何G | jincao |
5 | 传:十二月六日核心在政治局会 | 万维网友来 |
6 | 美国大选启示录:丑陋的美国人 | 爪四哥 |
7 | 美中卡脖子战方兴未艾 | 随意生活 |
8 | 中俄重挫,普京欲哭无泪/连缅 | 秋念11 |
9 | <摩西宣布神的吩咐> | 霞步思 |
10 | 薄上习下进行时~ | 山蛟龙 |