如何提升你的数据结构、算法以及解决问题的能力
这篇文章借鉴了我过去在学校一个学期的个人经历和挑战,当我进入学校的时候,我对任何 DSA(数据结构和算法)和解决问题的策略几乎一无所知。作为一名自学成才的程序员,我对一般编程会更加熟悉和舒适,例如面向对象编程,而不是 DSA 问题所需要的解决问题的能力。
这篇文章反映了我整个学期的经历,并包含了为了快速提高数据结构、算法和解决问题的能力而求助的资源。
面临问题:你知道原理,但是你被实际应用卡住了
我在学期初期的时候遇到这个问题,当时我不明白我哪里不懂,这是一个特别严重的问题。我对这个理论很了解,例如,什么是链表,它是如何工作的,它的各种操作和时间复杂度,它支持的 ADT(抽象数据类型),以及如何实现 ADT 操作。
但是,由于我不明白我哪里不懂,所以我无法确定我对它的理解和在实际应用中解决问题的差距。
不同类型的问题
一个数据结构问题的例子:描述如何在链表中插入一个节点并说明时间复杂度。
这是一个算法问题:在旋转数组中查找元素并说明时间复杂度。
最后是解决问题的疑虑,我认为比之前两个问题的级别更高,这可能需要简要描述一个场景,并且列出问题的要求。在考试中,可能会要求你对解决方案进行描述。在编程比赛中,可能会要求你在不明确提供任何的数据结构和算法的情况下提交可运行的代码。换句话说,它们希望你能使用最适合的数据结构和算法来尽可能有效地解决问题。
如何提升你的数据结构、算法和解决问题的能力。
我主要使用三个网站来练习:HackerRank、LeetCode 和 Kattis。它们非常相似,特别是前两个,但不