随笔 - 41,  文章 - 0,  评论 - 0,  阅读 - 17097

随笔分类 -  算法思路与技巧

思维锻炼
摘要:1. 树结构 与 链表之间的转换关系: 437. 路径总和 III : 二叉树 与 链表之间的思维转换 + 链表解决题目的方法; 1 //二叉树相当于 两条走向的链表,这道题对于链表用前缀和解决; 2 //那么两条走向的链表 处理方法; 3 /** 4 * Definition for a bina 阅读全文
posted @ 2022-05-22 22:48 学海一扁舟 阅读(30) 评论(0) 推荐(0) 编辑
AC自动机(Aho-Corasick automaton)
摘要:**基础知识** 针对多模匹配问题的解决方案:字典树 + KMP 算法 ==> AC 自动机 1. 字典树的暴力匹配: 1 #include <iostream> 2 #include <string> 3 #include <cstring> 4 #include <vector> 5 #incl 阅读全文
posted @ 2022-05-16 23:31 学海一扁舟 阅读(879) 评论(0) 推荐(0) 编辑
字典树(Trie) 与双数组字典树(DoubleArrayTrie)
摘要:**基础知识** 字典树(Trie): 单词查找树, 可用于单词查找,字符串排序; 在大部分的树中, 节点 代表 集合;边 代表 关系;(很重要,代码实现中很多地方都体现); 字典树的具体结构如下图,其中每一条边代表一个字符;不同节点颜色代表以该节点结尾的单词是否存在(粉色:存在;白色:不存在)。 阅读全文
posted @ 2022-04-28 23:42 学海一扁舟 阅读(715) 评论(0) 推荐(0) 编辑
经典字符串匹配算法
摘要:**基础知识** 前置知识: 母串S/文本串:被查找源字符串; 模式串T: 目标字符串; 单模匹配问题:只有一个模式串问题; 字符串匹配算法需要极强观察能力; 常见的算法: 1. 暴力匹配(brute force):保证不重不漏的进行每一次匹配,实现查找的目的;O(n * m); 2. KMP算法 阅读全文
posted @ 2022-04-24 00:18 学海一扁舟 阅读(298) 评论(0) 推荐(0) 编辑
递推与动态规划
摘要:**基础知识** 1.递推基础知识: 斐波那契(Fibonacii)数列的递推公式:F(n) = F(n -1) + F(n - 2); 70. 爬楼梯: Fibonacci 的最直接体现; 前置知识: 数学归纳法: a: 验证k0 成立; (边界条件) b: 证明如果ki 成立,那么Ki+1 也成 阅读全文
posted @ 2022-04-12 23:10 学海一扁舟 阅读(892) 评论(0) 推荐(0) 编辑
红黑树(RB Tree)
摘要:**基础知识** 红黑树的基本性质:(红黑树是弱化版的AVL 树) 1. 每个节点非黑即红; 2. 根节点是黑色; 3. 叶节点(NIL(Null-pointer to objective))是黑色的; 在示意图中没有画出来的NIL!! 在删除操作中很重要,删除操作中主要就是处理双重黑失衡; 4. 阅读全文
posted @ 2022-03-31 23:14 学海一扁舟 阅读(254) 评论(0) 推荐(0) 编辑
单调队列(monotone-Queue)/单调栈(monotone-Stack)
摘要:**基础知识** 单调队列(monotone-Queue):重点关注队首元素 目的: 主要为了解决RMQ(range Minimum/Maximum Query) 区间最值问题; 如果不移除开头元素,则最终deque 中留下的元素,则是用来解决固定末尾RMQ问题; 本质来讲,由每次往后移位后对应的d 阅读全文
posted @ 2022-03-15 22:49 学海一扁舟 阅读(222) 评论(0) 推荐(0) 编辑
常见查找与搜索(二分/DFS/BFS/HashMap)
摘要:**基础知识** 1.二分算法:二分的是问题规模,减少无用范围; a. 二分查找: 对顺序查找的优化, 二分的是区间范围;最终找到的结果是在区间范围内,满足条件的位置(隐藏的含义是,最终找到的可能是最左边/右边的位置,这也是对于代码处理过程要注意的边界条件); 基本过程: min 是头指针; max 阅读全文
posted @ 2022-01-23 23:04 学海一扁舟 阅读(169) 评论(0) 推荐(0) 编辑
经典排序算法(快排/归并)
摘要:**基础知识** 排序算法重要性: 问题系统熵决定了一个问题被解决的难易程度,排序可以有效降低熵值; 排序中有很多算法中都有分治的思想; **代码演示** 1. 一些基本的排序方法及优化(选择,冒泡,插入排序, 堆排序); 注意边界条件,特别是递归中下一次递归的范围没有减少,就会陷入死循环中; 对于 阅读全文
posted @ 2022-01-17 22:57 学海一扁舟 阅读(88) 评论(0) 推荐(0) 编辑
常见的代码技巧
摘要:1. 双指针法(定长,变长); 滑动窗口:3. 无重复字符的最长子串 1 //滑动窗口 + 二分 2 3 class Solution { 4 public: 5 bool check(int len, string s) { 6 vector<int> cnt(256, 0); 7 int k = 阅读全文
posted @ 2022-01-02 21:35 学海一扁舟 阅读(69) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示