数据结构与算法
文章平均质量分 77
LeetCode算法分析
ManbaBryant
这个作者很懒,什么都没留下…
展开
-
数据结构与算法——图论
文章目录1. 拓扑排序1.1 场景1.2 思路1.3 代码1. 拓扑排序1.1 场景对有向无环图(DGA),顶点经过排序后得到一个顶点序列。对任意节点u、v,若图中存在u --> v的边,则排序后顶点u也应在v前面1.2 思路从DGA图中找到一个没有前驱的顶点,输出删除以这个点为起点的边重复上述,直到最后一个顶点被输出。如果还有顶点未被输出,则说明有环!(a)a没有前驱节点(入度为0)(b)输出a,删除以a为起点的边(b、c、d入度减1)(c)f、c没有前驱节点,选取原创 2021-01-16 17:19:36 · 178 阅读 · 0 评论 -
数据结构与算法——LeetCode刷题记录
文章目录1. 单调栈2. 区间问题3. 最大子序和4. 滑动窗口5. 优先队列/堆6. 岛屿问题(网格DFS)7. 二分查找8. 栈9. HashSet/HashMap10. 位运算11. 链表12. 二叉树13. 设计类14. 快慢指针15. 回文16. 数字操作17. 双指针18. BFS其他1. 单调栈简单496. 下一个更大元素 I中等402. 移掉K位数字581. 最短无序连续子数组739. 每日温度901. 股票价格跨度1081. 不同字符的最小子序列困难4原创 2020-11-24 19:08:10 · 1271 阅读 · 2 评论 -
数据结构与算法——动态规划(DP)
文章目录1. 应用场景2. DP状态2.1 最优子结构2.2 无后效性2.3 解题思路3. 问题类别3.1 线性DP3.1.1 基础模型3.1.1.1 [LeetCode 300. 最长上升子序列](https://leetcode-cn.com/problems/longest-increasing-subsequence/)3.1.1.2 [LeetCode 1143. 最长公共子序列](https://leetcode-cn.com/problems/longest-common-subsequenc原创 2020-11-03 16:56:58 · 1406 阅读 · 0 评论 -
数据结构与算法——中缀表达式与后缀表达式
1. 中缀表达式给定中缀表达式:1+2*(3+4)-5=10从左向右遍历,数字1,入栈操作数栈1空空空运算符栈空空空空+号,判断运算符栈是否为空,为空,入栈操作数栈1空空空运算符栈+空空空数字2,入栈操作数栈12空空运算符栈+空空空*号,判断运算符栈是否为空,不为空,判断当前操作符优先级是否小于或等于栈顶运算符,不是,入栈操作数栈12空空原创 2020-08-12 22:35:29 · 268 阅读 · 0 评论 -
数据结构与算法——正则表达式
1. 字符类字符含义举例.匹配任意一个字符a.可以匹配ab、ac、a1等[ ]匹配括号中任意一个字符[abc]d可以匹配ad、bd、cd-在[]中表示字符范围[0-9]a可以匹配0a、1a、2a…9a^匹配输入字符串的开始位置^ab匹配以ab开头的字符串[ ^ ]在[]中开头,匹配除括号中字符之外的任意一个字符[ ^xy]1可以匹配a1、b1,但不可以匹配x1、y12. 数量限定符字符含义举例?匹配前面的子表原创 2020-10-28 10:09:49 · 402 阅读 · 1 评论 -
数据结构与算法——高级数据结构:字典树/Trie树+线段树+树状数组
文章目录1. 为什么需要字典树2. 什么是字典树1. 为什么需要字典树节约空间:10万个只包含小写字母的字符串,采用字典树可以减少内存消耗节约时间:检索效率高2. 什么是字典树根节点不包含字符,每条边代表一个字符从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串每个节点的所有子节点包含的字符都不相同参考链接:https://blog.csdn.net/kuronekonano/article/details/100063157...原创 2020-10-12 09:19:49 · 296 阅读 · 0 评论 -
数据结构与算法——高级数据结构:并查集
文章目录1. 思路2. 代码实现3. 例题1. 思路参考链接:并查集详解(超级简单有趣~~就学会了)江湖上大侠太多,将他们的门派使用树结构表示。每个门派的根节点是掌门,任意节点的父节点是自己的直属上级。两个大侠碰到了,需要找到他们的掌门是否是同一个人江湖上门派太多,总是打架。希望把这些小门派都合并,就不会打架了。路径压缩:江湖上有门派人数太多,结构太复杂,找掌门需要从叶子节点一层一层向上找。所以将所有大侠都放到同一层,都直接被掌门领导。2. 代码实现存放掌门的数组int[原创 2020-09-30 14:29:49 · 467 阅读 · 0 评论 -
数据结构与算法——Java常用api
1. 栈StackStack<Character> stack=new Stack<Character>();stack.push('c');//入栈char c=stack.peek();//查看栈顶元素stack.pop();//出栈class Stack<E> extends Vector<E> {}2. SetSet<Integer> set=new HashSet<>();boolean flag=set.原创 2020-08-14 18:08:52 · 413 阅读 · 0 评论 -
数据结构与算法——字符串匹配之暴力匹配+KMP
文章目录1. 暴力匹配算法2. KMP算法1. 暴力匹配算法字符串Sabbaabbaaba匹配结果模式串Pabbaaba不匹配,右移字符串Sabbaabbaaba匹配结果模式串Pabbaaba不匹配,右移字符串Sabbaabbaaba匹配结果模式串Pabbaaba不匹配,右移字符串S原创 2020-07-27 11:52:37 · 246 阅读 · 0 评论 -
数据结构与算法——查找算法总结
文章目录1. 顺序查找2. 分块查找3. 二分查找4. 斐波那契查找5. 插值查找6. 散列/哈希查找7. 树查找7.1 二叉排序树/二叉搜索树/BST树7.2 平衡二叉树/AVL树7.3 红黑树7.4 B树/B+树8. 图查找8.1 BFS8.2 DFS1. 顺序查找原理:按顺序比较每个元素,直到找到关键字为止时间复杂度:O(n)2. 分块查找分块查找是顺序查找的优化方法。原理:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中然后,在已确定的块中进行顺序查找3. 二分查找原创 2020-05-14 12:46:29 · 392 阅读 · 0 评论 -
数据结构与算法——排序算法总结
文章目录1. 冒泡排序术语说明:稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面不稳定:如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面In-place:占用常数内存,不占用额外内存Out-place:占用额外内存内排序:所有排序操作都在内存中完成外排序:由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行1. 冒泡排序...原创 2020-05-13 09:32:58 · 234 阅读 · 0 评论 -
数据结构与算法——树结构
文章目录1. 二叉树1.1 定义1.2 分类1.2.1 满二叉树 / 完美二叉树1.2.2 完全二叉树1.2.3 完满二叉树1.2.4 二叉排序树 / 二叉查找树 / 二叉搜索树 Binary Search Tree1.2.5 平衡二叉树 / AVL树 Balanced Binary Tree1.2.6 红黑树2. 多叉树2.1 B树 / B-树2.2 B+树参考链接1. 二叉树1.1 定义...原创 2020-04-04 11:13:12 · 445 阅读 · 0 评论 -
数据结构与算法——深度优先搜索(DFS)
深度优先搜索(DFS)算法总结1.介绍深度优先搜索属于图算法的一种,是一个针对图和树的遍历算法,英文缩写为DFS即Depth First Search。深度优先搜索是图论中的经典算法,利用深度优先搜索算法可以产生目标图的相应拓扑排序表,利用拓扑排序表可以方便的解决很多相关的图论问题,如最大路径问题等等。一般用堆数据结构来辅助实现DFS算法。其过程简要来说是对每一个可能的分支路径深入到不能再深入...原创 2019-12-28 21:31:27 · 2288 阅读 · 0 评论 -
数据结构与算法——分治算法
分治算法总结分治法由两部分组成:分:递归解决较小的问题治:然后从子问题的解构建原问题的解传统上,至少包含两个递归调用的程序才叫做分治算法。一般分出来的子问题不相交。例题一:Leetcode53. 最大子序和算法分析:将区间等分。最大子序和要么是左半区间的子序和,要么是右半区间的子序和,要么横跨两端当最大子数组有 n 个数字时:若 n==1,返回此元素left_...原创 2019-12-24 10:45:54 · 514 阅读 · 0 评论