注意:所有的文本内容来自于 jwasham/coding-interview-university 我只是将其 fork 下来,方便自己学习。
-
- 二分查找(视频)
- 二分查找(视频)
- 详情
- 蓝图
- 【复习】四分钟二分查找(视频)
- 实现:
- 二分查找(在一个已排序好的整型数组中查找)
- 迭代式二分查找
-
- Bits 速查表 ── 你需要知道大量 2 的幂数值(从 2^1 到 2^16 及 2^32)
- 好好理解位操作符的含义:&、|、^、~、>>、<<
- 一补数和补码
- 计算置位(Set Bits)
- 交换值:
- 绝对值:
-
笔记:
- 实现各种排序,知道每种排序的最坏、最好和平均的复杂度分别是什么场景:
- 不要用冒泡排序 - 效率太差 - 时间复杂度 O(n^2), 除非 n <= 16
- 排序算法的稳定性 ("快排是稳定的么?") - 排序算法的稳定性 - 排序算法的稳定性 - 排序算法的稳定性 - 排序算法 - 稳定性
需要再看看
- 哪种排序算法可以用链表?哪种用数组?哪种两者都可?
- 并不推荐对一个链表排序,但归并排序是可行的.
- 链表的归并排序
- 实现各种排序,知道每种排序的最坏、最好和平均的复杂度分别是什么场景:
-
关于堆排序,请查看前文堆的数据结构部分。堆排序很强大,不过是非稳定排序。
-
加州大学伯克利分校:
-
归并排序代码:
-
快速排序代码:
-
实现:
- 归并:平均和最差情况的时间复杂度为 O(n log n)。
- 快排:平均时间复杂度为 O(n log n)。
- 选择排序和插入排序的最坏、平均时间复杂度都是 O(n^2)。
- 关于堆排序,请查看前文堆的数据结构部分。
-
有兴趣的话,还有一些补充,但并不是必须的:
总结一下,这是15 种排序算法的可视化表示。 如果你需要有关此主题的更多详细信息,请参阅“一些主题的额外内容”中的“排序”部分。
-
-
Stanford 大学关于递归 & 回溯的课程:
-
什么时候适合使用
-
尾递归会更好么?
-
-
- 在你的面试中或许没有任何动态规划的问题, 但能够知道一个题目可以使用动态规划来解决是很重要的。
- 这一部分会有点困难,每个可以用动态规划解决的问题都必须先定义出递推关系,要推导出来可能会有点棘手。
- 我建议先阅读和学习足够多的动态规划的例子,以便对解决 DP 问题的一般模式有个扎实的理解。
- 视频:
- Skiena:CSE373 2020 - 讲座 19 - 动态规划简介(视频)
- Skiena:CSE373 2020 - 讲座 20 - 编辑距离(视频)
- Skiena:CSE373 2020 - 讲座 20 - 编辑距离(续)(视频)
- Skiena:CSE373 2020 - 讲座 21 - 动态规划(视频)
- Skiena:CSE373 2020 - 讲座 22 - 动态规划和复习(视频)
- Simonson:动态规划 0(从 59:18 开始)(视频)
- Simonson:动态规划 I - 第 11 讲(视频)
- Simonson:动态规划 II - 第 12 讲(视频)
- 单独的动态规划问题列表(每个都很短): 动态规划(视频)
- 耶鲁课程笔记:
- Coursera 课程: