摘要: 并查集 并查集思路: 有若干个样本a,b,c,d...假设类型都是V 在并查集中一开始认为每个样本都在单独的集合里 用户可以在任何时候调用俩个方法:boolean isSameSet(V x,V y):查询样本x和样本y是否属于一个集合;boolean union(V x,V y):把x和y各自所在 阅读全文
posted @ 2021-08-21 18:44 YanickFan 阅读(247) 评论(0) 推荐(0)
摘要: SB树(SizeBalance树) 每个结点所在子树的结点个数不小于其兄弟的两个孩子所在子树的结点个数。不算重复的key,只算这个树上有多少不同的key。AVL维持了高度,SB树维持了节点的个数。 检查平衡性图解 LL:对X进行右旋 RR:对X进行左旋 LR: 将有问题的孙子节点旋转到整体顶部 Si 阅读全文
posted @ 2021-10-28 10:36 YanickFan 阅读(122) 评论(0) 推荐(0)
摘要: 搜索二叉树(BinarySearchTree) 每一颗子树,左边比我小,右边比我大 搜索二叉树一定要说明以什么标准来排序 经典的搜索二叉树,树上没有重复的用来排序的key值 如果有重复节点的需求,可以在一个节点内部增加数据项 搜索二叉树查询key(查询某个key存在还是不存在) 如果当前节点的val 阅读全文
posted @ 2021-10-26 16:05 YanickFan 阅读(195) 评论(0) 推荐(0)
摘要: 一致性哈希 分布式存储结构最常见的结构 1.哈希域变成环的设计 2.虚拟节点技术 场景描述 假设,我们有三台缓存服务器,用于缓存图片,我们为这三台缓存服务器编号为0号、1号、2号,现在,有3万张图片需要缓存,我们希望这些图片被均匀的缓存到这3台服务器上,以便它们能够分摊缓存的压力。也就是说,我们希望 阅读全文
posted @ 2021-10-18 17:16 YanickFan 阅读(118) 评论(0) 推荐(0)
摘要: 哈希函数 > out f(in data) 1.输入参数data,假设是in类型,特征:可能性无穷大,比如str类型的参数 2.输出参数out,特征:可能性可以很大,但一定是有穷尽的 3.哈希函数没有任何随机的机制,固定的输入一定是固定的输出 4.输入无穷多但输出值有限,所以不同输入也可能输出相同( 阅读全文
posted @ 2021-10-15 15:05 YanickFan 阅读(97) 评论(0) 推荐(0)
摘要: 问题1 数组arr[...]都是正数,问累加和=sum的子数组最长是多长,子数组连续,子串连续,子序列可以不连续 思路: 1.准备一个窗口,定义变量windowSum表示窗口内累加和,len要返回的子数组最大长度 2.windowSum < sum,R右移 3.windowSum > sum,L右移 阅读全文
posted @ 2021-10-12 17:12 YanickFan 阅读(117) 评论(0) 推荐(0)
摘要: 打表法 1.问题如果返回值不太多,可以用hardcode的方式列出,作为程序的一部分 2.一个大问题解决时底层频繁使用规模不大的小问题的解,如果小问题的返回值满足条件1,可以把小问题的解列成一张表,作为程序的一部分 3.打表找规律(重要) 打表找规律 1. 某个问题,输入参数类型简单,并且只有一个实 阅读全文
posted @ 2021-10-11 17:13 YanickFan 阅读(201) 评论(0) 推荐(0)
摘要: Morris遍历 morris遍历是二叉树遍历算法的超强进阶算法,跟递归、非递归(栈实现)的空间复杂度,morris遍历可以将非递归遍历中的空间复杂度降为O(1)。从而实现时间复杂度为O(N),而空间复杂度为O(1)的精妙算法。morris遍历利用的是树的叶节点左右孩子为空(树的大量空闲指针),实现 阅读全文
posted @ 2021-10-08 15:03 YanickFan 阅读(118) 评论(0) 推荐(0)
摘要: KMP算法 KMP算法要解决的问题就是在字符串(也叫主串)中的模式(pattern)定位问题。说简单点就是我们平时常说的关键字搜索。模式串就是关键字(接下来称它为P),如果它在一个主串(接下来称为T)中出现,就返回它的具体位置,否则返回-1(常用手段)。例如str= "abctabcf" match 阅读全文
posted @ 2021-10-04 13:10 YanickFan 阅读(92) 评论(0) 推荐(0)
摘要: 滑动窗口 滑动窗口是一种想象出来的数据结构 有左边界L和有边界R 在数组或字符串或者一个序列上,记为S,窗口就是S[L...R]这一部分 L往右滑以为着一个样本出了窗口,R往右滑意味着一个样本进了窗口 L和R都是只能往右滑 作用 滑动窗口首位指针等技巧,是一种求解问题的流程设计 滑动窗口内最大值和最 阅读全文
posted @ 2021-09-28 15:46 YanickFan 阅读(85) 评论(0) 推荐(0)
摘要: 动态规划体会 整体思路 下面我们看一个栗子来充分理解从暴力递归到记忆化搜索再到经典动态规划的过程 栗子1: 有一个数组arr,均为正数且无重复值,每个值代表一个硬币的面值,例如arr[7,3,100,50],每个面值有无数张,给定一个数值1000,问有多少种组合方法可以达到1000。 代码暴力递归: 阅读全文
posted @ 2021-09-09 17:06 YanickFan 阅读(179) 评论(0) 推荐(0)