合理运用心流通道,科学刷题,快乐刷题!
怎么刷算法题?按照什么顺序刷题?如何科学地提高算法能力?
如果你刚开始刷题,还不熟悉基本编程语法和常用库函数,推荐先刷力扣官方的入门题单:
有了一些简单题的积累,就可以开始刷我的题单啦~
完成上述核心内容后,可以自由地刷其他知识点。例如字典树、并查集等。
请结合 基础算法精讲 学习。
安装 这个插件,可以在题单中自动标记做过的题目。(注:需要在扩展程序的管理页面,开启开发者模式/开发人员模式。)
对于动态规划,至少要做 100 道才算入门。
优点:按照题单专题刷,一个套路可以解决多个题目,刷题效率高。此外,做同一个专题下的题目,相当于在从不同的角度去观察、思考同一个算法,这能让你更加深刻地理解算法的本质。
缺点:提前知道题目类型,跳过了一些思考步骤。但比赛/笔试是不会告诉你这题是什么类型的,把 DP 想成贪心的大有人在。可以结合下面的方法 B,锻炼自己判断题目类型的能力。
与方法 A 互补,随机刷题。
优点:做题时不知道题目类型,可以增强实战能力;查漏补缺,检验自己的学习成果。
缺点:知识点有些零散,不如题单那么系统。
如果即将面试,时间紧迫,可以刷 HOT 100,这些都是经典面试题。
另外还有一个 面试 150 题单,其实它和 HOT 100 有很多重复题目,如果刷完 HOT 100 还有时间的话,可以刷这个 150 题单。
问:做题经常要看题解,怎么办?
答:看题解不丢人。甚至我觉得如果看题解的次数太少,说明做的题目太简单了,应该增加难度。
问:做题没思路,思考多久可以看题解?
答:10 分钟到数小时都可以。如果看完题解觉得题解很妙,那就学到了一个自己不会的技巧。如果看完题解觉得自己是xx,可以再多思考下,或者换个时间段(早/中/晚/洗澡的时候)思考,说不定就有思路了。(注:这在心理学上叫做孵化效应,即在离开问题后,大脑会在无意识中处理问题,从而在重返问题时突然产生新的思路。)
问:很多题目没有思路,很焦虑怎么办?
答:学算法是需要时间沉淀的,坚持刷题吧。现在不会的算法/题目,过段时间再来看,会有新的感悟。加油!
问:如何根据数据范围,估计题目允许的时间复杂度,从而估计要用什么算法?
答:一般每秒能执行约 108 次运算(Python 可能要除以 10),可以据此估计能通过的时间复杂度,如下表所示。
数据范围
允许的时间复杂度
适用算法举例
n≤10
O(n!) 或 O(Cn)
回溯、暴力搜索
n≤20
O(2n)
状态压缩 DP
n≤40
O(2n/2)
折半枚举
n≤102
O(n3)
三重循环的 DP、Floyd
n≤103
O(n2)
二重循环的 DP、背包
n≤105
O(nlogn)
大多数题目都是这个范围,所以各类算法都有
n≤106
O(n)
线性 DP、滑动窗口
n≤109
O(n)
判断质数
n≤1018
O(logn) 或 O(1)
二分、快速幂、数学公式
注:实际做题时,注意常数因子的影响。例如哈希表比数组慢。
如果您还有其他疑问或建议,欢迎在下方评论。