我是从去年9月份左右开始刷LeetCode,到目前为止已经刷了300多道题,在刷题的过程中我发现实际上有很多题目是存在相似性的,也就是所谓一个模板就可以通杀这一类的题目。因此,学习了一段时间之后,我希望能够把自己对一些题型包括数据结构的理解进行总结。一方面是方便自己日后查看,毕竟人的记忆是有期限的,只有不断的复习,才能够彻底掌握某个知识点。同时,也秉着开源的目的,希望能够帮助更多人:sparkling_heart:。
如果你是第一次尝试开始刷LeetCode,那么不妨花点时间看看知乎的这篇文章大家都是如何刷 LeetCode 的?,里面有许多高质量的回答。
这里结合自己的经验稍微总结一下:
- 不要纠结于用什么语言刷题,刷题主要培养的是你的算法思维,和你抽象一个问题的能力,如何根据题意分析建模,剩下的就是用计算机语言实现。
- 前期最好是按照Tag刷题,LeetCode上已经为你分类了许多Tag,这样的好处是,通过刷题的过程你自己也能摸索出这一类题型大概的解题思路,更进一步自己能够总结出这一类题型常用的模板。我个人建议一开始先按照
Tree
这个Tag刷题,这里面涉及到广度优先遍历和深度优先遍历的思维,其他Tag中都会涉及到这种递归的**。 - 多总结,不管是用什么方式,比如思维导图或者是笔记,不要觉得这一过程很繁琐,有这时间还不如再去刷一道题,实际上多总结多复习才是提炼你真正掌握一种题型的能力。
- 进阶:每次对自己写的代码的时间复杂度和空间复杂度进行分析,看看有没有更加优化的方法,优化代码的写法,去除冗余的代码,规范化的命名和注释,让代码可读性更强。
[1] Python实现数据结构和算法
[2] 背包九讲
[3] 图论的一些教程
目前的计划是按Tag对题型分类,现阶段主要记录一些动态规划的题目,包括题目分析、解题思路和代码实现(Python)。说实话这一类题目在面试中经常出现,但是这一类题目又很考究你抽象建模的能力,当当动态规划就分了好多类型,而且动态规划真的需要你多积累和总结,只有你做过这一类型的题目,才能保证你在面试过程中能想到这种解题思路。
后续会继续补充其他类型的一些题目,以及用C++实现做过的题目...
现在自己依然还是会坚持每天刷一道题,周末有空的话还是会打打LeetCode周赛。