明天给大家聊聊怎么刷题,预计分几篇文章来写,明天是第一篇。
话不多说,间接上干货。
我倡议大家 BFS
我的做法是集中工夫只刷某一类的题目。这样对某一类题目就很有心得,做题就有题感,不会 做一道是一道,下次碰到相似的题,甚至原题都不会。其实很多算法都是非亲非故的,等你攻克了足够多的专题之后,算法常识能力死记硬背。
我倡议大家刷题的时候是 广度优先,一一冲破 碰到不会的适当放弃,而不是深度优先,”死磕某一个常识“。比方大家在刷树的专题,碰到一个树型 DP 不会,这个时候应该果决放弃,等大家刷到 DP 的时候再回过头 捡起来。
听起来简略,然而我从哪个专题开始,题目那么多我该刷哪个呢?
上面是我的 91 天刷题流动的目录:
能够看出,咱们的章节安顿就是一个专题一个专题,从简略到艰难。大家也能够参考这个模式。如果你切实不晓得。
刷题路线能够从网上找,你如果懒得找,而且也不厌弃在下的话,能够参考我的 leetcode 题解仓库,把外面的题目刷下,或者加入我的 91 天学算法。
BFS 就是在必要的时候不求甚解。比方,我在 穿上衣服我就不意识你了?来聊聊最长回升子序列 中提取了很多 LIS(最长回升子序列)题目。很多人评论说”这效率不行,不如贪婪啊!“。
这点我抵赖。然而我这里的次要目标是给大家横向比照题目,做到 多题同解。
大家想看效率高的,其实也不难。LIS 也能够用 贪婪 + 二分 达到不错的效率。代码如下:
代码文字版如下:
class Solution:
def lengthOfLIS(self, A: List[int]) -> int:
d = []
for a in A:
i = bisect.bisect_left(d, a)
if i < len(d):
d[i] = a
elif not d or d[-1] < a:
d.append(a)
return len(d)
所以我的意思是,大家在适当的时候要不求甚解,不去谋求这些货色。等大家把一个套路学的差不多,咱再学下一个。所谓 小人报仇,十年不晚 ^\_^
另外插一句题外话,LIS 真的很有用,大家肯定要把握,把握了平方的解法再去看看 $NlogN$ 的解法,一些 HARD 题目必须要 $NlogN$ 能力过。
比方这道题:
题目后的提醒如下:
3 <= nums.length <= 1000
1 <= nums[i] <= 109
题目保障 nums 删除一些元素后肯定能失去山形数组。
看到这些,大略估算咱们的工夫复杂度 $N^2logN$,根本过是没问题的,果然就过了。
再次印证了,刷题的多少是主要的,吃透一类题才是王道,这其实就和我的 BFS 刷题大法 相响应。
套路很重要
以上的这些,其实都是帮忙大家辨认套路,进步刷题效率的。晓得了广度优先,也晓得了刷什么题也是不够的。比方:
- 这些专题有哪些考点?如何应答?
- 有模板么?
- 我如何想到用这种解法?
- 等等
针对这些问题,我写了很多文章给大家。比方后面一段时间,我给大家写了两篇专题:
- 简直刷完了力扣所有的树题,我发现了这些货色
- 简直刷完了力扣所有的链表题,我发现了这些货色
大家的反应大部分都是不错的。
在之前,我还写了几篇解套篇,就是将力扣雷同解法的题目汇总起来,帮忙大家解套,比方:
- 穿上衣服我就不意识你了?来聊聊最长回升子序列
- 你的衣服我扒了 –《最长公共子序列》
甚至还写了母题系列(不过大家不太喜爱,就没持续更新了):
- 《我是你的妈妈呀》– 第一期
你认真看完我写的,基本上笼罩了专题下的大部分考点。
你接下来想看啥?欢送去我的刷题群通知我(关注公众号《力扣加加》回复 leetcode 依据提醒操作即可)。
把握多个编程语言
刷题以及打较量都考究速度,天下文治唯快不破。
这个快,一方面是 运行速度快 ,另一方面是 编码速度快。你能够看出很多人刷题,打较量都会一直切换语言的。咱们要抵赖不同语言效率是不一样的,这个效率可能是执行,也可能是编码。具体应用哪种语言,看你的需要。
论编码速度,那必定动静语言快,论执行速度那必定动态语言快。所以我的倡议是大家至多把握 一静一动,即把握一个动静语言,一个动态语言。
我集体动静语言用的 Python 和 JS,动态语言用的 Java 和 CPP,大家能够作为参考。
一个小倡议是你抉择的语言要是题解比拟热门的。那什么语言是热门的?其实很容易。力扣题解区,语言排名高的根本就是了,如下图:
把握语言不仅能帮忙你在效率中运用自如,并且还容易看懂他人的题解。除此之外还有一个用,那就是 回头温习的时候用。拿我来说,我会不固定回去刷以前做过的题,然而一道题做过了就没新鲜感了,这个时候我就换个语言持续刷,又是一番滋味。
应用模仿面试
这个技巧,我之前提到过。力扣也有模仿面试的性能,大家也能够线下真人白板面试。不论如何,倡议大家肯定要有 工夫观点和一次 AC 的规范。
应用模板
很多题目都是模板题。你如我在 二分法专题 就给大家总结了有数的模板,其实还有很多专题都有,大家去我的历史文章翻翻就有。
然而大家 肯定了解之后再去用模板。不要没了解间接套,这是不好的。
更多技巧,期待下次。
预报
最初最初给大家一个小道消息,和下面的解题模板无关。
接下来,力扣加加的刷题插件打算推出 刷题模板性能。
- 给大家提供多种刷题模板,能够间接复制应用。
- 各个模板都有都有的题目,大家能够中转题目进行”默写“。
- 更多功能,等你来提~