概念
欢迎
欢迎来到课程!
欢迎
目标
本课程专注于教授解决问题的策略,帮助你熟练应对各种软件工程面试问题。
几乎所有的题目都是我本人或我认识的人在面试中遇到过的题目变体。这些题目经过精心挑选,以便我们能够系统地学习多种解题策略。
题目
每个题目都配有详细解答和策略说明。大多数题目提供两到三种不同的解决方案,并对每种方案进行深入比较分析。
通常我们会从一个暴力解法开始,逐步优化,直到在时间复杂度、空间复杂度或两者上实现最佳效果。
我们将为每一个解决方案计算并讨论其时间和空间复杂度。
你能获得什么
完成本课程后,你将掌握多种可应用于广泛问题的算法策略。我们的讲解将教会你如何分析不同类型的问题,让你在真实面试中能迅速找准方向,找到正确答案。
我们将教你如何批判性地分析自己设计的算法,并找出提升效率的方法。通过不断优化算法,减少执行时间或降低内存占用——这正是面试官所期待的。
格式
每个题目的格式类似。我们首先描述问题及其约束条件,必要时提供示例。部分题目会给出提示,帮助你开启思路。
接着是一个空白的代码区域,供你自行尝试解决。界面看起来如下所示。请补全函数并运行测试用例进行验证。
1function add(a, b) { 2 // 你的代码写在这里 3}
不同之处在于,函数体是空的,但已准备好测试用例,确保你的函数按预期运行。
在空白代码区之后,我们将进入解法讲解环节。首先介绍暴力解法,解释其原理及效率。如果存在更优解法,我们随后会继续探讨。
学习要求
- 你需要具备基本的 JavaScript 知识,并能使用它编写有意义的代码。
- 你需要熟悉 ES2015 的基础概念,如
let和const声明、箭头函数和类。 - 你应该对“时间复杂度”和“空间复杂度”这两个术语有一定了解。只要你清楚它们的含义,就能顺利跟上课程进度,因为我们会逐题讲解如何分析这些复杂度。
关于时间与空间复杂度的理解,你可以参考以下内容: