1. Pattern: Sliding window,滑动窗口类型
-
这个问题的输入是一些线性结构:比如链表呀,数组啊,字符串啊之类的 -
让你去求最长/最短子字符串或是某些特定的长度要求
2. Pattern: two points, 双指针类型
-
一般来说,数组或是链表是排好序的,你得在里头找一些组合满足某种限制条件 -
这种组合可能是一对数,三个数,或是一个子数组
3. Pattern: Fast & Slow pointers, 快慢指针类型
-
问题需要处理环上的问题,比如环形链表和环形数组
-
当你需要知道链表的长度或是某个特别位置的信息的时候
-
有些情形下,咱们不应该用双指针,比如我们在单链表上不能往回移动的时候。一个典型的需要用到快慢指针的模式的是当你需要去判断一个链表是否是回文的时候。
4. Pattern: Merge Intervals,区间合并类型
-
当你需要产生一堆相互之间没有交集的区间的时候 -
当你听到重叠区间的时候
5. Pattern: Cyclic Sort,循环排序
-
这些问题一般设计到排序好的数组,而且数值一般满足于一定的区间 -
如果问题让你需要在排好序/翻转过的数组中,寻找丢失的/重复的/最小的元素
6. Pattern: In-place Reversal of a LinkedList,链表翻转
-
如果你被问到需要去翻转链表,要求不能使用额外空间的时候
7. Pattern: Tree Breadth First Search,树上的BFS
-
如果你被问到去遍历树,需要按层操作的方式(也称作层序遍历)
8. Pattern: Tree Depth First Search,树上的DFS
-
需要区别我们是先处理根节点(pre-order,前序),处理孩子节点之间处理根节点(in-order,中序),还是处理完所有孩子再处理根节点(post-order,后序)。 -
递归处理当前节点的左右孩子。
-
你需要按前中后序的DFS方式遍历树 -
如果该问题的解一般离叶子节点比较近。
9. Pattern: Two Heaps,双堆类型
-
这种模式在优先队列,计划安排问题(Scheduling)中有奇效 -
如果问题让你找一组数中的最大/最小/中位数 -
有时候,这种模式在涉及到二叉树数据结构时也特别有用
10. Pattern: Subsets,子集类型,一般都是使用多重DFS
-
我们从空集开始:[[]] -
把第一个数(1),加到之前已经存在的集合中:[[], [1]]; -
把第二个数(5),加到之前的集合中得到:[[], [1], [5], [1,5]]; -
再加第三个数(3),则有:[[], [1], [5], [1,5], [3], [1,3], [5,3], [1,5,3]].
-
问题需要咱们去找数字的组合或是排列
11. Pattern: Modified Binary Search,改造过的二分
-
首先,算出左右端点的中点。最简单的方式是这样的:middle = (start + end) / 2。但这种计算方式有不小的概率会出现整数越界。因此一般都推荐另外这种写法:middle = start + (end — start) / 2
-
如果要找的目标改好和中点所在的数值相等,我们返回中点的下标就行
-
如果目标不等的话:我们就有两种移动方式了 -
如果目标比中点在的值小(key < arr[middle]):将下一步搜索空间放到左边(end = middle - 1) -
如果比中点的值大,则继续在右边搜索,丢弃左边:left = middle + 1
12. Pattern: Top ‘K’ Elements,前K个系列
-
根据题目要求,将K个元素插入到最小堆或是最大堆。 -
遍历剩下的还没访问的元素,如果当前出来到的这个元素比堆顶元素大,那咱们把堆顶元素先删除,再加当前元素进去。
-
如果你需要求最大/最小/最频繁的前K个元素 -
如果你需要通过排序去找一个特定的数
13. Pattern: K-way merge,多路归并
-
把每个数组中的第一个元素都加入最小堆中 -
取出堆顶元素(全局最小),将该元素放入排好序的结果集合里面 -
将刚取出的元素所在的数组里面的下一个元素加入堆 -
重复步骤2,3,直到处理完所有数字
-
该问题的输入是排好序的数组,链表或是矩阵 -
如果问题让咱们合并多个排好序的集合,或是需要找这些集合中最小的元素
14. Pattern: 0/1 Knapsack (Dynamic Programming),0/1背包类型
15. Pattern: Topological Sort (Graph),拓扑排序类型
-
初始化
a) 借助于HashMap将图保存成邻接表形式。
b) 找到所有的起点,用HashMap来帮助记录每个节点的入度 -
创建图,找到每个节点的入度
a) 利用输入,把图建好,然后遍历一下图,将入度信息记录在HashMap中 -
找所有的起点
a) 所有入度为0的节点,都是有效的起点,而且我们讲他们都加入到一个队列中 -
排序
a) 对每个起点,执行以下步骤
—i) 把它加到结果的顺序中
— ii)将其在图中的孩子节点取到
— iii)将其孩子的入度减少1
— iv)如果孩子的入度变为0,则改孩子节点成为起点,将其加入队列中
b) 重复(a)过程,直到起点队列为空。
-
待解决的问题需要处理无环图 -
你需要以一种有序的秩序更新输入元素 -
需要处理的输入遵循某种特定的顺序
1. 0/1 Knapsack, 0/1背包,6个题
2. Unbounded Knapsack,无限背包,5个题
3. Fibonacci Numbers,斐波那契数列,6个题
4. Palindromic Subsequence,回文子系列,5个题
5. Longest Common Substring,最长子字符串系列,13个题
参考资料
[1]Grokking Dynamic Programming Patterns for Coding Interviews: https://www.educative.io/courses/grokking-dynamic-programming-patterns-for-coding-interviews?aff=K7qB
[2]穷码农:动态规划及面试,学完这一篇,你就入门了:Dynamic Programming, 动态规划,经典题目: https://zhuanlan.zhihu.com/p/89391817
[3]穷码农:LeetCode到底应该怎么刷?面试应该注意哪些问题?大公司到底怎么进?来看看LC大神们的刷题攻略!: https://zhuanlan.zhihu.com/p/98580817
[4]刷完LeetCode是什么水平,能拿到什么水平的 offer ?: https://www.zhihu.com/question/32019460/answer/875114975
[5]https://leetcode.com/discuss/general-discussion/459286/Year-in-Review%3A-2019: https://link.zhihu.com/?target=https%3A//leetcode.com/discuss/general-discussion/459286/Year-in-Review%253A-2019
[6]穷码农:别再埋头刷LeetCode之:北美算法面试的题目分类,按类型和规律刷题,事半功倍: https://zhuanlan.zhihu.com/p/89392459
[7]Grokking the Coding Interview: Patterns for Coding Questions: https://www.educative.io/courses/grokking-the-coding-interview?aff=K7qB
<pre style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;min-height: 1em;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><br /></section><section style="max-width: 100%;min-height: 1em;letter-spacing: 0.544px;white-space: normal;color: rgb(0, 0, 0);font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;line-height: 1.75em;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong>完<strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;font-size: 16px;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;letter-spacing: 0.5px;box-sizing: border-box !important;overflow-wrap: break-word !important;">—</span></strong></span></strong></span></strong></section><section style="max-width: 100%;letter-spacing: 0.544px;white-space: normal;font-family: -apple-system-font, system-ui, "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;widows: 1;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;letter-spacing: 0.544px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section powered-by="xiumi.us" style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-top: 15px;margin-bottom: 25px;max-width: 100%;opacity: 0.8;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><section style="margin-bottom: 15px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;color: rgb(127, 127, 127);font-size: 12px;font-family: sans-serif;line-height: 25.5938px;letter-spacing: 3px;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(0, 0, 0);box-sizing: border-box !important;overflow-wrap: break-word !important;"><strong style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;font-size: 16px;font-family: 微软雅黑;caret-color: red;box-sizing: border-box !important;overflow-wrap: break-word !important;">为您推荐</span></strong></span></section><section style="margin: 5px 32px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;">如何评价何恺明团队的最新工作RegNet?<br style="max-width: 100%;box-sizing: border-box !important;overflow-wrap: break-word !important;" /></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">研究生从入门到放弃!不好意思老板,我这周没进展</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="max-width: 100%;color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">有了这个神器,轻松用 Python 写个 App</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="color: rgb(87, 107, 149);-webkit-tap-highlight-color: rgba(0, 0, 0, 0);cursor: pointer;max-width: 100%;font-size: 14px;box-sizing: border-box !important;overflow-wrap: break-word !important;">MIT最新深度学习入门课,安排起来!</span></section><section style="margin-top: 5px;margin-bottom: 5px;padding-right: 0em;padding-left: 0em;max-width: 100%;min-height: 1em;font-family: sans-serif;letter-spacing: 0px;opacity: 0.8;line-height: normal;box-sizing: border-box !important;overflow-wrap: break-word !important;"><span style="font-size: 14px;">一个AI PhD的毕业随感</span></section></section></section></section></section></section></section></section></section>
本篇文章来源于: 深度学习这件小事
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
内容反馈