二叉搜索树
简单来说,就是维护一个左子树的节点值 < 根节点值 < 右子树的节点值的二叉树。所以中序遍历之后就是一个升序排列的结果。
TAG_COLLECTION //
共有 13 篇笔记使用了这个 Tag。
简单来说,就是维护一个左子树的节点值 < 根节点值 < 右子树的节点值的二叉树。所以中序遍历之后就是一个升序排列的结果。
一种自平衡的BST,具有如下性质—— 1. 每个节点不是红色就是黑色 2. 根节点必须是黑色。 3. 叶子节点(NIL 节点)被视为黑色。 4. 如果一个节点是红色,则它的两个子节点都是黑色。 5. 从任一节点到其所有后代 NIL 节点的简单路径都包含相同数目的黑色节点。
对于一个数组,使用left,right两根指针来扫描?(或许可以这么说)或许就是广义的双指针法子。
以739. 每日温度为引入
快速的找到第k大的数,思想和快排差不多。均摊分析时间复杂度为$O(n)$
简单来说,就是用一个哈希表记录一下已经求过的前缀和出现次数(实际上或许存什么都行,本质上就是记录一下前缀和信息: prefix -> hash,前缀和作为key,然后value是我们需要维护的某种东西)
假设存在一条有向边 A->B, 表示 B 的执行需要先依赖 A 的执行, 那么一整张图就表示一个完整的依赖关系(AoV 网),此时使用拓扑排序可以找到其中一种执行方式,可以按照依赖关系来执行完整个流程。
把字符串的前缀进行一个哈希,这样在比较的时候可以先判断哈希后的值是否相等,用在大量需要重复匹配字符串前缀的情况下。
基础的字符串匹配算法.
最近公共祖先,LCA
> 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 > > 示例 1: > 输入: s "aacecaaa" > 输出: "aaacecaaa" > > 示例 2: > 输入: s "abcd" > 输出: "dcbabcd" > > 提示: > -...
马拉车,主要用于解决回文子串的问题,其核心的思想就是“Mirrors”!
简单来说,在存储大量字符串时, 往往会出现大量公共 prefix, 那么 Trie 将这些公共 prefix 对应的状态共享,通过字符作为状态转移条件,这样从 root 沿路径游走即可表示一个字符串