java算法
文章平均质量分 88
还好江南
这个作者很懒,什么都没留下…
展开
-
算法基础24-《进阶》AC自动机和卡特兰数
文章目录1 AC自动机1.1 AC自动机的实现1 AC自动机KMP算法解决的问题是,在一个大字符串中,求目标match串存在还是不存在,最早存在的地方在哪AC自动机要解决的问题是,在一个文章中,有一些候选字符串,求这个文章中命中了哪些候选串。1.1 AC自动机的实现为每一个候选串建立一个前缀树,每个树节点都有一个fail指针。头节点fail指针人为规定指向null,第一层节点的fail指针人为规定,指向头节点。建立好前缀树后,宽度优先遍历设置全部的fail指针比较绕,看不懂看代码宽度优先遍原创 2021-04-09 17:32:40 · 243 阅读 · 0 评论 -
23-《进阶》有序表原理及扩展
文章目录1 有序表原理及扩展1.1 搜索二叉树1.2 搜索二叉树的增删改查1.2.1 搜索二叉树的查找和添加1.3 传统搜索二叉树存在的问题1.3.1 平衡搜索二叉树1.3.2 左旋和右旋1.4 有序表1.5 有序表的实现(AVL树,SB树,红黑树)1.5.1 AVL树1.5.1.1 AVL树针对某个节点的平衡性处理1.5.2 SB树1.5.2.1 SB树针对某个节点的平衡性处理1.5.3 红黑树1.5.3.1 红黑树针对某个节点的平衡性处理Redis为什么选择跳表的结构?1.6 跳表SkipList(也可原创 2021-04-09 17:32:03 · 412 阅读 · 2 评论 -
算法基础22-《进阶》如何解决资源限制类题目
文章目录1 如何解决资源限制类题目1.1布隆过滤器用于集合的建立与查询,并可以节省大量空间(已讲)1.2 一致性哈希解决数据服务器的负载管理问题(已讲)1.3 利用并查集结构做岛问题的并行计算(已讲)1.4 哈希函数可以把数据按照种类均匀分流1.5 位图解决某一范围上数字的出现情况,并可以节省大量空间1.6 利用分段统计思想、并进一步节省大量空间1.7 利用堆、外排序来做多个处理单元的结果合并题目1(位图和分段统计):题目2(位图)1 如何解决资源限制类题目1.1布隆过滤器用于集合的建立与查询,并可以节原创 2021-04-09 17:31:42 · 432 阅读 · 0 评论 -
算法基础21-《进阶》哈希函数有关的结构和岛问题
文章目录1 哈希函数1.1 认识hash函数1.2 hash应用函数举例1.3 hash函数实现1.3.1 认识经典hash(数组加单链表)2 布隆过滤器2.1 位图的概念2.2 布隆过滤器2.2.1 布隆过滤去的添加2.2.2 布隆过滤器的查询2.2.3 k个hash函数如何选择,位图m空间选择多大2.2.4 布隆过滤器重要公式2.2.3 布隆过滤器的使用场景HDFS3 一致性Hash分布式存储的问题一致性hash的实现思路解决一致性Hash环的均分问题(负载均衡)利用hash函数的离散性不仅可以实现负载原创 2021-04-09 17:30:56 · 315 阅读 · 0 评论 -
算法基础20-《进阶》数组累加和问题
文章目录1 数组累加和问题三连1.1 数组累加和问题1.1.1 第一连例题--------------3251.1.2 第二连例题1.1.2 第三连例题1 数组累加和问题三连知识点补充:系统设计类题目设计一个系统,该系统的功能是可以一直不停的提供不同的UUID,该UUID使用的极为频繁,比如全球卖西瓜的,每个西瓜子是一个UUID思路,如果使用hashcode,有可能会产生碰撞。不使用hashcode,使用机器的ip或者mac地址加上纳秒时间,也不行,所有机器时间是否强同步解决思路:定义一台服原创 2021-04-09 17:30:17 · 472 阅读 · 0 评论 -
算法基础19-《进阶》打表技巧和矩阵处理技巧
文章目录1 打表技巧和矩阵处理技巧1.1 打表法1.1.1 打表找规律1.1.2 例题1 小虎买苹果1.1.2 例题2 牛羊吃草1.1.3 例题31.2 矩阵处理技巧zigzag打印矩阵转圈打印矩阵矩阵调整-原地旋转正方形矩阵---------------leedcode481 打表技巧和矩阵处理技巧在一个数组arr[]中,每个数的大小不超过1000,例如[10,9,6,12],所有的数,求所有数质数因子的个数总和?10=2*59=3*36=3*312=3*2*2我们可以把1000以内的数的质原创 2021-04-09 17:29:45 · 358 阅读 · 0 评论 -
18-《进阶》线段树
文章目录1 线段树(又名为线段修改树)1.1 线段树概念建立1.1.1 累加和数组建立1.1.2更新结构数组建立1.2 线段树案例实战---------6991.3 什么样的题目可以用线段树来解决?1 线段树(又名为线段修改树)线段树所要解决的问题是,区间的修改,查询和更新,如何更新查询的更快?线段树结构提供三个主要的方法, 假设大小为N的数组,以下三个方法,均要达到O(logN) :// L到R范围的数,每个数加上Vvoid add(int L, int R, int V, int[] arr)原创 2021-04-01 16:09:54 · 158 阅读 · 0 评论 -
算法基础17-《进阶》Morris遍历
文章目录1 Morris遍历1.1 Morris遍历目的算法流程时间复杂度估计1.2 Morris遍历的应用1.3 Morris遍历为最优解的情景1 Morris遍历1.1 Morris遍历目的在二叉树的遍历中,有递归方式遍历和非递归遍历两种。不管哪种方式,时间复杂度为O(N),空间复杂度为O(h),h为树的高度。Morris遍历可以在时间复杂度O(N),空间复杂度O(1)实现二叉树的遍历算法流程从一个树的头结点cur开始:1、cur的左树为null,cur = cur.right2、cur有原创 2021-04-01 16:07:54 · 128 阅读 · 0 评论 -
算法基础16-《进阶》Manacher(马拉车)算法
文章目录1 Manacher算法1.1 简介1.2 字符串最长回文子串暴力解1.3 Manacher解决最长回文串O(N)1.4 例题1 Manacher算法1.1 简介回文串概念:一个字符串是轴对称的,轴的左侧和右侧是逆序的关系,例如"abcba",“abccba”Manacher算法解决在一个字符串中最长回文子串的大小,例如"abc12321ef"最长回文子串为"12321"大小为5回文串的用途,例如我们可以把DNA当成一个字符串,有一些基因片段是回文属性的,在生理学上有实际意义1.2 字符原创 2021-04-01 16:07:12 · 116 阅读 · 0 评论 -
算法基础15-《进阶》KMP算法与bfprt算法
文章目录1 KMP算法1.1 KMP算法分析1.2 KMP算法应用题目1:旋转词题目2:子树问题2 bfprt算法2.1 bfprt算法分析2.2 bfprt算法应用1 KMP算法大厂劝退,面试高频^_^1.1 KMP算法分析查找字符串问题:例如我们有一个字符串str="abc1234efd"和match=“1234”。我们如何查找str字符串中是否包含match字符串的子串?暴力解思路:循环str和match,挨个对比,最差情况为O(NM)。时间复杂度为O(NM)KMP算法,在N大于M时原创 2021-04-01 16:04:45 · 352 阅读 · 0 评论 -
算法进阶14-《进阶》类似斐波那契数列的递归
文章目录1 类似斐波那契数列的递归1.1 求斐波那契数列矩阵乘法的方法1.2 菲波那切数列可优化为O(logN)时间复杂度1.2.1 矩阵加快速幂方法1.2.1.1 矩阵推导1.2.1.2 快速幂转化思路1.3 递推推广式1.4 迈楼梯问题1.5 递推经典例题一1.6 递推经典例题二2.蓄水池算法3.随机函数1 类似斐波那契数列的递归1.1 求斐波那契数列矩阵乘法的方法1、菲波那切数列的线性求解(O(N))的方法非常好理解(一次遍历,N项依赖于N-1项和N-2项)2、同时利用线性代数,也可以改写出另原创 2021-04-01 16:03:46 · 448 阅读 · 0 评论 -
算法基础13-《进阶》单调栈和窗口及其更新结构
文章目录1 单调栈和窗口及其更新结构1.1 窗口1.1.1 滑动窗口是什么?1.1.2 滑动窗口能做什么?1.1.3 维护窗口滑动的更新结构1.1.4 高频题:求滑动窗口最大值1.1.5 高频题二:达标子数组数量问题---560(不算)1.1.6 如何优化一个问题?1.2 单调栈1.2.1 单调栈结构1.2.2 单调栈的应用1 单调栈和窗口及其更新结构1.1 窗口1.1.1 滑动窗口是什么?窗口只是我们脑海中的一个范围,用过L和R来规定我们窗口的边界。保证L<=R这个条件1、滑动窗口是一原创 2021-04-01 16:03:16 · 253 阅读 · 0 评论 -
算法基础11-暴力递归思维、动态规划思维
文章目录1 暴力递归、动态规划1.1 暴力递归思维1.1.1 暴力递归下的尝试1.1.1.1 例一:汉诺塔问题1.1.1.2 例二:字符串子序列问题1.1.1.3 例四:字符串全排列问题1.1.1.4 例六:用递归逆序一个栈(考验脑回路)1.2 动态规划模型1.2.1 从左往右尝试模型1.2.1.1 数字字符转化问题1.2.1.2 背包价值问题1.2.2 范围上的尝试模型1.2.2.1 玩家抽取纸牌问题1.2.2.2 N皇后问题如何尝试一件事?1 暴力递归、动态规划1.1 暴力递归思维暴力递归实质就是原创 2021-03-30 19:32:50 · 340 阅读 · 0 评论 -
算法基础10-并查集、图相关算法介绍
文章目录1 并查集、图相关算法1.1 并查集1.1.1 并查集基本结构和操作1.1.2 例题1.2 图相关算法1.2.1 图的概念1.2.2 图的表示方法1.2.2.1 邻接表表示法1.2.2.2 邻接矩阵表示法1.2.3 图的遍历1.2.3.1 宽度优先遍历1.2.3.2 深度优先遍历1.2.4 图的拓扑排序1.2.5 图的最小生成树算法1.2.5.1 Kruskal(克鲁斯卡尔)算法1.2.5.2 Prim算法1.2.6 图的最短路径算法1.2.6.1 Dijkstra(迪杰特斯拉)算法1.2.6.2原创 2021-03-30 19:32:15 · 301 阅读 · 0 评论 -
算法基础09-贪心算法深度解析
文章目录1 贪心算法1.1 基本概念1.2.1 贪心算法解释1.2.2 贪心算法的证明问题1.2 贪心算法求解思路1.2.1 标准求解过程1.2.2 贪心算法解题套路1.3 贪心算法套路解题实战1.3.1 例一:会议日程安排问题1.3.2 例二:居民楼路灯问题1.3.3 例三:哈夫曼树问题1.3.4 例四:项目花费和利润问题1 贪心算法1.1 基本概念1、最自然智慧的算法2、用一种局部最功利的标准,总是能做出在当前看来是最好的选择3、难点在于证明局部最优解最功利的标准可以得到全局最优解4、对于贪原创 2021-03-30 19:31:30 · 859 阅读 · 0 评论 -
算法基础08-二叉树的递归思维
文章目录1 二叉树的递归套路1.1 二叉树的递归套路深度实践1.1.1 例一:判断二叉树平衡与否.1.2 例二:返回二叉树任意两个节点最大值1.1.3 例三:返回二叉树中的最大二叉搜索树Size1.1.4 例四:派对最大快乐值1.1.5 例五:判断二叉树是否是满二叉树1.1.6 例六:二叉搜索树的头结点1.1.7 例子七:是否是完全二叉树1.1.8 例子八:最低公共祖先1 二叉树的递归套路1、 可以解决面试中的绝大部分二叉树(95%以上)的问题,尤其是树形dp问题2、 其本质是利用递归遍历二叉树的便利原创 2021-03-30 19:30:55 · 260 阅读 · 0 评论 -
算法基础07-二叉树基本算法
文章目录1 二叉树基本算法1.1 二叉树的遍历1.1.1 二叉树节点定义1.1.2 递归实现先序中序后序遍历1.1.3 非递归实现先序中序后序遍历(DFS)1.1.4 二叉树按层遍历(BFS)1.2 二叉树的序列化和反序列化1.3 直观打印一颗二叉树1.4 题目实战1.4.1 题目一:返回二叉树的后继节点1.4.2 题目二:折纸问题1 二叉树基本算法1.1 二叉树的遍历1.1.1 二叉树节点定义 Class Node{ // 节点的值类型 V value;原创 2021-03-30 19:30:20 · 301 阅读 · 0 评论 -
算法基础06-链表相关面试题总结
文章目录1 链表问题1.1 链表面试常用数据结构和技巧1.1.1 快慢指针问题1.1.2 面试题一:判断回文结构1.1.3 面试题二:按值划分单链表1.1.4 面试题三1.1.5 面试题四1.1.6 面试题五1 链表问题面试时链表解题的方法论对于笔试,不用太在乎空间复杂度,一切为了时间复杂度对于面试,时间复杂度依然放在第一位,但是一定要找到空间最省的方法1.1 链表面试常用数据结构和技巧1、 使用容器(哈希表,数组等)2、 快慢指针1.1.1 快慢指针问题1、 输入链表头结点,原创 2021-03-30 19:29:43 · 192 阅读 · 0 评论 -
算法基础05-前缀树、桶排序、排序总结
文章目录1 前缀树结构(trie)、桶排序、排序总结1.1 前缀树结构1.2 不基于比较的排序-桶排序1.2.1 计数排序1.2.2 基数排序1.3 排序算法的稳定性1.3.1 稳定的排序1.3.2 不稳定的排序1.3.3 排序稳定性对比1.4 排序算法总结1.5 排序常见的坑点1.6 工程上对排序的改进1 前缀树结构(trie)、桶排序、排序总结1.1 前缀树结构单个字符串中,字符从前到后的加到一颗多叉树上字符放在路上,节点上有专属的数据项(常见的是pass和end值)所有样本都这样添原创 2021-03-30 19:29:07 · 216 阅读 · 0 评论 -
算法基础04-比较器、堆
文章目录1 比较器与堆1.1 堆结构1.1.1 完全二叉树结构1.1.2 数组实现堆1.1.3 大根堆与小根堆1.1.4 构建堆1.1.5 堆排序1.1.6 语言、系统提供的堆和手写堆的选择1.1.6.1 系统实现的堆1.1.6.2 系统堆和手写堆选择1.2 比较器1 比较器与堆1.1 堆结构1.1.1 完全二叉树结构完全二叉树结构:要么本层是满的,要么先满左边的,以下都是完全二叉树graph TDA-->BA-->Cgraph TDA-->BA--&原创 2021-03-30 19:28:34 · 210 阅读 · 0 评论 -
算法基础02-链表、栈、队列、递归、哈希表、顺序表
文章目录1 链表、栈、队列、递归、哈希1.1 链表1.1.1 单向链表1.1.2 双向链表1.1.3 单双链表简单练习1.2 栈、队列1.3 栈、队列常见面试题1.4 递归1.4.1 递归行为的时间复杂度1.5 哈希表HashMap、HashSet1.6 顺序表 TreeMap、TreeSet1 链表、栈、队列、递归、哈希1.1 链表1.1.1 单向链表单向链表的节点结构(可以实现成泛型) : public class Node { public int value;原创 2021-03-30 19:27:22 · 144 阅读 · 0 评论 -
算法基础01-复杂度、排序、二分、异或
文章目录1 时间复杂度、空间复杂度、排序、异或运算1.1 时间复杂度1.1.1 排序操作1.1.1.1 选择排序1.1.1.2 冒泡排序1.1.1.3 插入排序1.2 空间复杂度1.3 常数项时间复杂度1.4 算法最优解1.5 常见时间复杂度1.6 算法和数据结构脉络1.7 认识对数器1.8 认识二分法1.9 认识异或运算1 时间复杂度、空间复杂度、排序、异或运算1.1 时间复杂度常数时间操作:算数运算:+ - * /位运算:>>(带符号右移动)、 >>>(不带原创 2021-01-28 10:23:24 · 379 阅读 · 0 评论