记得刚开始刷算法时,以为凭着之前自己的知识储备,一些easy的题甚至部分middle的题应该自己能做出来,结果却是想了半天想出思路,写好代码后又调试半天,最后要么总有情况没有考虑不能运行,要么运行后效率很低甚至TimeOut...
然后回头一看,诶,原来这是最原始最简单的暴力解法。然后就开始领略使用巧妙的思想来解决题目...
特别是到了二叉树以后,想不出来是真想不出来
看了视频后才知道这个特有的思想
到后来自己琢磨着,说服了自己:
- 刚开始的时候每次新开一章刷题时,总是想到天荒地老都想不出来怎么办?
新章节就有系统的、成型的、独特的思路(如递归、动规)、新的套路(如用栈迭代法模拟树的遍历),之前没有接触过很难想出来。先学习好这个思想,知道怎么去用。之后二刷三刷再内化成自己,知道什么时候用,灵活运用。
- 认为学算法应该:
有人带着,学技能 —— 知道有这个东西,并熟悉怎么去用
当熟练了这些技能,拿在手里能用的时候:
自己琢磨,想场景 —— 为什么用这个,什么时候用这个,解决了什么问题
做到信手沾来
比如一刷新学习的思想:
- 对边界进行定义(左闭右开 or 左闭右闭)
- 需要判断元素是否在集合里时,就要考虑哈希法。
- 栈与队列,可模拟树的深度优先与广度优先
- 二叉搜索树 与 后序遍历 —— 后续遍历二叉搜索树是递增的序列
- ...
这些思想需要在二刷时进一步总结归纳,对应着题型巩固
总之,这两个月以来,完成136题AC,通过
- 数组 P2
- 链表 P2
- 哈希表 P2
- 字符串 P2
- 栈与队列 P3
- 二叉树 P9
- 回溯 P5
- 贪心 P6
- 动规 P17
- 单调栈 P2
各部分的占比,也明显看出** 二叉树** 以及 动态规划 是重中之重,其次是回溯。(回溯中也有几题较难的题在一刷时放下了)
最后,通过两个月的刷题,算法算是入门了,将较高频的题刷,当然也有几道hard的题以及某些题需要时间来理解。
即将大三,奈何自己算法能力在大学两年里没有系统的学习,曾经被力扣第一题“两数之和”吓住了阵脚的我,非常幸运能在准大三的暑假能遇见如此成系统,讲的又如此细致的卡哥。更佩服的是将这套精心亲自讲 + 黑板板书的视频 以及 成体系的网站开源到网上,而且质量非常的好(至少我整个一刷下来是醍醐灌顶),无比的敬佩这种精神!