/DSA

"Traditional" Data Structure and Algorithm, including both theory and leetcode exercise.

Primary LanguageC++Creative Commons Zero v1.0 UniversalCC0-1.0

2023.5.16 update

本仓库或许在若干天之后做一次大的更新,原因是部分内容过于冗长,且属于个人第一次接触刷题的青涩之作,有很大的改进空间(例如dp就非常不成系统)。另一个原因是最近重拾这些刷题工作,并且预估会坚持很长一段时间。

大更方式就是一次全新的commit,更新后仓库名会做一次变更。如果确实需要现在的这份文档也不必担心,完整clone到本地后git log或git reflog找到commit hash,checkout到上面然后git checkout -b新建分支即可。

预计更新时间在一到两个月之后。

写在前面最重要的碎碎念

不夸张地说,「数据结构和算法」就和高考一样,实际应用题目至少有60%是吃经验的,而剩下40%对理论的「融会贯通」则是在获取60%经验的过程中逐渐得到的。因此,能熟练运用算法解题不是一蹴而就的。从模仿开始,多做多练多总结,是熟练掌握「数据结构和算法」的最快、必经之路。

本仓库的目的

仓库包含两部分:

  1. 数据结构和算法基础,所有内容位于DSA目录中。这部分包含了一些理论和个人思考性质的东西,总体来说偏理论。对很多人来说,课本上绝大多数的「理论」在某种程度上很难直接为解决实际问题提供帮助。只有当自己做出题的时候,回头看才发现那些「理论」确实是对的,但这时候其实已经费了很大劲了(或者说走了弯路)。因此,我十分希望这部分能够提供一些经得起推敲的「思考方法」,能让课本上的「理论」初步发挥功效。这样在实战时,我们能有一些能够直接上手使用的「弹药」,不至于抱着「理论」俩眼一抹黑。
  2. 实战部分。这里有两类内容,第一类是leetcode上实际的题目和题解。第二类是一些非常实用的,从经验中提炼总结下来的「实战方法」。这两类均在leetcode目录下,按照类型进行了归档。值得一提的是,第二类的「实战方法」我个人认为实际上是最有价值的,也是我个人不惜花费大量时间的总结,包含了「具体实用」的方法论和可以上手实践的leetcode练习题(Get Started一节)。这些题目可能具备一定的难度,如果不会做,大胆放心地查题解,通过题解可以快速学习提高。文档名上,「题解」均命名为[难度]-[leetcode上的题号].[题目名称].md,文件名不满足此格式的文档均为「实战方法」一类,例如"3w of xxx","单调栈","决策树与回溯法"等。

通过这两部分,尤其是实战部分,我希望能帮助大家形成一个较为完善的知识网络,打通相似的方法和问题,最终能够举一反三,形成自己独立且完整的思考。举其中的一个roadmap来说:二叉树递归 → 回溯法 → 一般形式的树的递归。

作为一个完全独立的,热爱CS的非科班选手,自己极端追求的「本质」、「优雅」、「美学主义」以及「稳定性」使我走了比一般人多很多的弯路。这里记录了我的「成长」、「思考」和「挣扎」。与现在和将来遇到的同道分享我的观点,相互帮助以擦出更多火花,快速进步。本人目前的水平和能力还远远不足,希望能够得到大家各式的issue、建议和指导,不胜感激!

感激你能来,希望能够对你有帮助或是启发,常来坐坐!与诸君共勉!