滑动窗口框架

从整体到细节,自顶向下,从抽象到具体的框架思维是通用的,不只是学习数据结构和算法,学习其他任何知识都是高效的。 双指针技巧 不论是链表还是数组,双指针的技巧都可以使用。 双指针的技巧可以分为两类,一类是快慢指针,一类是左右指针。前者主要解决链表中的问题,比如链表中是否有环的判定并给出环的起点位置,寻找链表中点,寻找链表倒数第 k 个元素等。后者主要解决 ...

BFS 算法框架

从整体到细节,自顶向下,从抽象到具体的框架思维是通用的,不只是学习数据结构和算法,学习其他任何知识都是高效的。 BFS 解决的问题 BFS 原本是图的一种遍历方式,从一个点开始,向四周开始扩散。一般都是用队列辅助遍历过程,每次将一个节点周围的所有节点加入队列。 因此广泛用于给定起始点(的条件)寻找最短距离。 BFS 相对 DFS 的最主要的区别是:BFS 找到的路径 ...

回溯算法框架

从整体到细节,自顶向下,从抽象到具体的框架思维是通用的,不只是学习数据结构和算法,学习其他任何知识都是高效的。 回溯算法的要素 回溯算法跟动态规划算法有些类似,动态规划里强调的是状态,选择和 base case,而回溯法里强调的是路径,选择列表和结束条件。 解决一个回溯问题,其实就是一个决策树的遍历过程,只需考虑以下三个 ...

动态规划框架

从整体到细节,自顶向下,从抽象到具体的框架思维是通用的,不只是学习数据结构和算法,学习其他任何知识都是高效的。 动态规划问题的特点 求解动态规划的核心问题是穷举,但动态规划问题一般都存在重叠子问题,而一般暴力穷举的效率都是极低的,因此需要 DP table (存储一些中间结果)来聪明地穷举,就可以避免不必要的计算。 另一方面,动态规划问题一定具备**最优子结构 ...

算法之回溯、动态规划、贪心、位运算

算法与数据操作也是面试时经常问到的题目。很多算法都有递归和循环的实现,同时查找和排序也是很基础的内容,除此之外,回溯法、贪心法、动态规划等针对一类问题的算法都是非常重要的。 --> 回溯法 回溯法可以看作蛮力法的升级版,它从解决问题每一步的所有可能选项里系统地选出一个可行的解决方案。 回溯法非常适合由多个步骤组成的问题,并且每个步骤都有多个选项。当我们在某一步 ...