# 开篇:拒绝盲目刷题,如何更高效的学习算法?

# 为什么要学习算法?
相信很多人的答案是为了面试。因为普通开发工程师在工作中用到复杂算法的概率很低
那么面试官为什么要面试算法呢?
- 考算法的本质是考智商,算法学的好的同学智商都不会太差,智商高也就更容易解决工作中遇到的问题
- 优中选优(俗称内卷),当大家八股文都背的很六的时候,只能通过更难的东西来筛选一下了
如何提高算法水平呢?
在校生可以多参加算法竞赛,例如ACM国际大学生程序时机竞赛(能深刻认识到人与人之间的差距有多大,哈哈),中国大学生程序设计竞赛(CCPC),蓝桥杯,各种在线的算法竞赛如,Codeforces,BestCoder等
毕业生刷LeetCode就足够用了。可以刷一下精选榜单《LeetCode 热题 HOT 100》《LeetCode 精选 TOP 面试题》,就不要盲刷了,毕竟毕业生精力真不够
如何刷题呢?
- 按照专题来刷,不要随机刷。这样更容易刷出感觉,更好的总结套路。这个道理可以类比学车,当你去练车的时候,教练不是一下午就把所有的考点技巧全交给你了把。基本上每次只教一个,然后你就练习把,基本一个技巧练一个下午,估计你都烦了,但这样你记得最深。
- 想不出来的时候一定不要去看题解。(实在想不出来才去看哈)。因为看题解来刷题是反人类思考习惯的(现在各种拍照搜题软件不就被国家禁止了么),很多题解你能看懂。但是再让你写的时候你不一定写出来,因为看题解的时候你经常会忽略作者为什么要这么写
- 总结套路。学而不思则罔,思而不学则殆。学习和思考一定要结合起来,当刷完一个专题时,你一定要回过头来总结一下。这个算法的套路是什么?能用来解决什么样的问题。不总结套路,有可能你刷过的题会,但是稍微变一下又不会了
- 不要在各种奇淫技巧上耗费时间。有些题目你按照常规的套路就能解决出来,但是有可能你会看到别人各种奇淫技巧的代码,这些代码通常时间或者空间效率更高,但是不容里理解。如果精力有限的话,我不建议你在这些不能被普遍应用的技巧上花费太多时间。
这个专栏就总结了我刷算法题总结的套路,鉴于时间关系,先发布一个beta版本,后续会不断完善细节的