算法
Venlexi
这个作者很懒,什么都没留下…
展开
-
并查集
有 n = 5 个数据,将这5个数据 各自形成一个集合,可以用 list 存储,并且它往上的节点指回自己,指回的节点叫做集合的代表节点如果将 节点 2 挂在 节点1 底下,那么 2 所在集合的代表节点是 1如果 3 也挂在 1 下面,那么 3 所在的代表集合节点 是 1最终形成这样如果两个 节点 的代表节点一样,那么 这两个节点是 同一个集合,否则 不是同一个集合集合的合并过程本来是 ...原创 2019-04-21 14:58:47 · 79 阅读 · 0 评论 -
BFPRT
解决的问题:在一个无需数组中,找到第 k 个大,或者第 k 个小的数经典思路:类似于快排我们想要 第 200 小的数随机选一个数,假设我们选到的数是300,一次遍历,将小于这个数的放左边,等于放中间,大于放右边,得到 x1 和 x2 的位置,x1=300 x2=350那么 第200小的数 肯定在新数组的 左半部分,我们把左半部分拿出来,再进行这样的划分,最终得到想要的 第 200 小的值...原创 2019-04-29 15:14:24 · 900 阅读 · 0 评论 -
Manacher算法
问题原型:一个字符串找到最长回文字串例如 121 1221 是回文思路:暴力破解,需要解决奇回文和偶回文的问题奇回文,从第 i 个位置开始,以 i 为中心,向两边扩张,如果发现 i 左右相等,那么回文数量 +2例如 abcba从 i = 1 开始, 无法向左扩展,因此回文长度为 1从 i = 2 开始,向左右扩展,回文长度为 3从 i = 3 开始,向左右扩展,回文长度为 3,再次...原创 2019-04-29 15:13:35 · 107 阅读 · 0 评论 -
KMP算法
如果要解决问题:有两个字符串 str1,str2,求 str1 是否包含 str2 ,如果包含,求位置------ 一般方法 -------每次从 str2 的 0 位置开始,依次和 str1 匹配例如 aaab 匹配 ab先 从 ab 的 a 开始匹配,可以匹配到 aaab 的 a,但是匹配不到 aaab 的 b从 ab 的 a 开始匹配,匹配 aaab 的第二个 a 开始匹配,这...原创 2019-04-23 15:10:45 · 106 阅读 · 0 评论 -
牛再生问题(2019阿里笔试第一题)
分析第一年只有一头牛 A第二年:A B(未成熟)第三年:A B(未成熟)C(未成熟)第四年:A B(未成熟)C(未成熟)D(未成熟)第五年:A B C(未成熟) D(未成熟)E(未成熟)F(未成熟)第六年:A B C D(未成熟) E(未成熟) F(未成熟) G(未成熟) H(未成熟)I(未成熟)每年只数为:1 2 3 4 6 9……规律为 F(n) = F(n-1) + F(n-...原创 2019-04-22 12:58:34 · 285 阅读 · 0 评论 -
IPO问题,最高利润
代价数组 cost[]利润数组 profit[]最多做 k 个项目,且项目不能并行做,也即一次之能做一个项目。也不能重复做相同项目给出初始资金 w,求最后最大收益------- 步骤 -------初始化 所有项目, 项目里面包含 花费 cost 和利润 profit准备一个小根堆,按照花费来建立,花费低的来到小根堆的头部有初始资金 w,依次弹出小根堆的头部,但是要保证弹出的花费低于...原创 2019-04-21 19:57:16 · 147 阅读 · 0 评论 -
前缀树
建树,数据存储在路径上可以查询 是否包含前缀为 xx 的字符串例如 查询前缀是否包含 be 的字符串,可以查到但是无法查询确定的字符串,例如查询字符串是否含有 be,无法查询,那么需要改进也即,可以在节点位置上添加一条信息,这条信息保存了 有多少个字符串以当前字母结尾的例如 在插入 bef 字符串的时候,b路径的尾端节点置 0 ,因为没有任何一个字符串以 b 结尾同样,e 尾端节点也...原创 2019-04-21 17:03:12 · 143 阅读 · 0 评论 -
哈希表
时间复杂度:基本上是 O(1)因为可以进行很多优化:例如离线扩容使用时基本很少有扩容的现象特征:相同输入,相同输入不同输入,均匀分布哈希冲突的解决方法:链地址法:数组+链表开放地址法:当前位置被占,就往下移动一位,如果满,就扩容二次哈希:进行二次哈希值计算,用的是平方的一种形式问题:100T的一个文件,每行一个字符串,输出重复的字符串准备1000台机器,进行编号(0-999)...原创 2019-04-21 15:01:30 · 109 阅读 · 0 评论 -
布隆过滤器
布隆过滤器准备一个 M 长度的整形数组,下标 0 -> M-1准备 k 个独立哈希函数将 已有的 n个 数据依次进行k个哈希函数的计算,每个哈希函数计算的哈希值再 模 m,就能得到 这个这些数据应该在的位置,并将这个位置 涂黑经过 k 次涂黑之后,这个数组最多有 k 个位置被涂黑,最少有 1 个位置被涂黑在将 已有的 n个 已有数据 经过上面的步骤全都加入到数组里,布隆过滤器构建完...原创 2019-04-21 15:00:57 · 94 阅读 · 0 评论 -
一致性哈希
产生问题负载可能不均衡(加一台机器或者减一台机器)或者本来机器分的就不均匀解决方案:虚拟节点假设有3台机器,m-1,m-2,m-3将 这3台机器 分别划分 1000个节点m-1-1,m1-1-2,…,m-1-1000 m-2-1,m1-2-2,…,m-2-1000 m-3-1,m3-1-2,…,m-3-1000使用虚拟节点争夺环,每个虚拟节点抢占环的位置,争夺数据,争夺到数...原创 2019-04-21 15:00:21 · 96 阅读 · 0 评论 -
滑动窗口
两个指针,分别是 L 和 R当窗口进 数 的时候,R 进位,当窗口 出数的时候,L进位例如,数组内有 a b c,[a b c]按照下面的方式变化窗口首先 L=-1, R=-1R 往右滑动,R=R+1 = 0,R 往右滑动,R=R+1 = 1L 往左滑动,R 不动,L=L+1=0,现在的窗口变为 [b c]问题:得到每个窗口的最大值思路一:遍历窗口,代价是 O(n)思路二:设计一...原创 2019-04-29 15:14:59 · 760 阅读 · 0 评论