求解数组区间的和,有前缀和、差分数组、树状数组,但各所适用的场景不用。
题目给出的条件为:图、路径有权值、权重无负数、求路径长度最值,可以使用 dijkstra 求 出发点 到其他点的 最短路径,记住dijkstra算法模板,直接套上用,构建一个 State类记录点的id和记录的最短路径长度,然后核心是最小堆,结合BFS遍历。
回溯算法本质上也是一种暴力穷举算法,可以理解为:每个回溯问题就是遍历一个决策树的过程,每个叶子节点都存在一个数值,寻找叶子结点是否为满足条件的值,然后收集全部满足条件的值的过程就是回溯算法。
排列、组合和子集问题,无非就是寻找决策树叶子节点的过程,只是这三个问题对树枝的遍历和剪/加树枝有稍微变化罢了,然后在区分一下三种边界条件:元素无重复不可复选、元素无重复可复选、元素可重复不可复选。
滑动窗口也为快慢指针。两个指针,fast指针在前面探路,slow指针负责在移动前做判断条件,然后再移动,两个指针覆盖的长度即为要找的元素空间。
常见的快慢指针题目:找满足条件的最长子串、删除排序的重复元素等。
本章主要介绍链表相关的逻辑操作,包括寻找倒数第 K 个节点、寻找中间位置、判断是否有环、判断两个链表是否相交等。
1 / 2