
算法与数据结构进阶课
文章平均质量分 65
神蜗牛
刚入行的萌新渣硕,想与各位大佬一起学习。
展开
-
算法与数据结构进阶课第十三节笔记
AC自动机与卡特兰数AC自动机1)关键在于fail指针的理解(网上帖子几乎没有解释)fail指针含义:目前来到的节点,之前路径上的字符串记为str,除了str之外哪个前缀字符串,和str的后缀串匹配最大,fail指针就指向那个最大匹配串的最后字符底下的节点。(难理解吧?其实是精髓,看视频)2)构建和使用看视频...原创 2021-05-28 21:28:51 · 462 阅读 · 0 评论 -
算法与数据结构进阶课第十二节笔记
有序表的原理、应用、扩展搜索二叉树搜索二叉树一定要说明以什么标准来排序经典的搜索二叉树,树上没有重复的用来排序的key值如果有重复节点的需求,可以在一个节点内部增加数据项...原创 2021-05-28 20:11:45 · 233 阅读 · 0 评论 -
算法与数据结构进阶课第十一节笔记
资源限制类题目1)布隆过滤器用于集合的建立与查询,并可以节省大量空间(已讲)2)一致性哈希解决数据服务器的负载管理问题(已讲)3)利用并查集结构做岛问题的并行计算(已讲)4)哈希函数可以把数据按照种类均匀分流5)位图解决某一范围上数字的出现情况,并可以节省大量空间6)利用分段统计思想、并进一步节省大量空间7)利用堆、外排序来做多个处理单元的结果合并题目1:32位无符号整数的范围是0~4,294,967,295,现在有一个正好包含40亿个无符号整数的文件,所以在整个范围中必然存在没出现原创 2021-05-27 22:33:34 · 308 阅读 · 0 评论 -
算法与数据结构进阶课第十节笔记
哈希函数有关的结构和岛问题认识哈希函数 -> out f(in data)1)输入参数data,假设是in类型,特征:可能性无穷大,比如str类型的参数2)输出参数类型out,特征:可能性可以很大,但一定是有穷尽的3)哈希函数没有任何随机的机制,固定的输入一定是固定的输出4)输入无穷多但输出值有限,所以不同输入也可能输出相同(哈希碰撞)5)再相似的不同输入,得到的输出值,会几乎均匀的分布在out域上重点:第5条!一个40亿的整数文件,一个整数是4个字节,只有1...原创 2021-05-27 20:34:20 · 185 阅读 · 0 评论 -
算法与数据结构进阶课第九节笔记
数组累积和问题三连例1、给定一个正整数组成的无序数组arr,给定一个正整数值K,找到arr的所有子数组里,哪个子数组的累加和等于K,并且是长度最大的,返回其长度。准备一个窗口[L..R] 的累积和是windowSumwindowSum > K, R++ 因为都是正数,已经大于 ,那么之后再累加不可能再小于等于KwindowSum < K, L ++windowSum = K, max = Math.max(R-L+1,max) public static i.原创 2021-05-27 16:29:53 · 154 阅读 · 0 评论 -
算法与数据结构进阶课第八节笔记
打表技巧和矩阵处理技巧打表法1)问题如果返回值不太多,可以用hardcode的方式列出,作为程序的一部分2)一个大问题解决时底层频繁使用规模不大的小问题的解,如果小问题的返回值满足条件1),可以把小问题的解列成一张表,作为程序的一部分3)打表找规律(本节课重点),有关1)和2)内容欢迎关注后序课程打表找规律1)某个面试题,输入参数类型简单,并且只有一个实际参数2)要求的返回值类型也简单,并且只有一个3)用暴力方法,把输入参数对应的返回值,打印出来看看,进而优化code.原创 2021-05-27 11:44:49 · 133 阅读 · 0 评论 -
算法与数据结构进阶课第七节笔记
线段树1,一种支持范围整体修改和范围整体查询的数据结构2,解决的问题范畴:大范围信息可以只由左、右两侧信息加工出,而不必遍历左右两个子范围的具体状况给定一个数组arr,用户希望你实现如下三个方法1)void add(int L, int R, int V) : 让数组arr[L…R]上每个数都加上V2)void update(int L, int R, int V) : 让数组arr[L…R]上每个数都变成V3)int sum(int L, int R) :让返回arr[L…R]这..原创 2021-05-26 21:53:48 · 168 阅读 · 1 评论 -
算法与数据结构进阶课第六节笔记
Morris遍历及其相关扩展一种遍历二叉树的方式,并且时间复杂度O(N),额外空间复杂度O(1)通过利用原树中大量空闲指针的方式,达到节省空间的目的当前节点cur,一开始cur来到树头1、cur无左树,cur = cur.right2、cur 有左树,找到左树最右节点mostRight(1)、mostRight 的右指针指向null, mostRight.right = cur, cur = cur.left(2)、mostRight 的右指针指向 cur,mostRight..原创 2021-05-25 21:29:35 · 115 阅读 · 0 评论 -
算法与数据结构进阶课第五节笔记
Manacher算法及其扩展假设字符串str长度为N,想返回最长回文子串的长度,时间复杂度O(N)暴力解法,以每个字符为中心计算回文子串的长度,但是要给每个字符中间加一个特殊字符,例如31211214 ---- #3#1#2#1#1#2#1#4# 这样计算出来的每个结果除2就是实际的回文子串长度Manacher就是在这个暴力解法的基础上利用信息做加速1、回文半径(从中心开始数一半)、回文直径(整个回文串的长度)2、回文半径数组 pArr[] 记录每个位置得出的答案3、回文最右..原创 2021-05-22 20:35:09 · 104 阅读 · 0 评论 -
算法与数据结构进阶课第四节笔记
KMP算法及其扩展假设字符串str长度为N,字符串match长度为M,M <= N,想确定str中是否有某个子串是等于match的。时间复杂度O(N)指标,i 位置前的字符串的,前缀与后缀相同的最大长度,不能等于整体建立这样一个指标数组a a b a a b c -1 0 1 0 1 2 3 -1和0人为规定 public static int getIndexOf(Str...原创 2021-05-21 23:05:02 · 99 阅读 · 0 评论 -
算法与数据结构进阶课第三节笔记
bfprt算法与蓄水池算法蓄水池算法例1:假设有一个源源吐出不同球的机器,只有装下10个球的袋子,每一个吐出的球,要么放入袋子,要么永远扔掉,如何做到机器吐出每一个球之后,所有吐出的球都等概率被放进袋子里?第k个球到来的时候,以10/k的概率放入袋子,扔的时候10个里面随机选一个例2:给定一个能概率的返回0-7的函数,怎么做能等概率的返回某个范围首先将这个给定的函数,均分,奇数时最大的那个返回重roll,这样可以概率的返回0,1, 之后想要概率的返回(0,n)就看n用二进制k位能表示,等原创 2021-05-21 23:04:42 · 158 阅读 · 0 评论 -
算法与数据结构进阶课第二节笔记
类似斐波那契数的递归斐波那契数的快速幂f(n-1) * a + f(n-2) * c = f(n)f(n-1) * b + f(n-2) * d = f(n-1) 可以计算出a,b,c,d因为f(n) = f(n-1) + f(n-2) 必然会有上面的公式替换进去就能得出继续推导得出 public static int f3(int n) { if (n < 1) { return 0; } if (n == 1 ||...原创 2021-05-21 18:02:58 · 163 阅读 · 2 评论 -
算法与数据结构进阶课第一节笔记
单调栈和滑动窗口滑动窗口是什么?滑动窗口是一种想象出来的数据结构:滑动窗口有左边界L和有边界R在数组或者字符串或者一个序列上,记为S,窗口就是S[L..R]这一部分L往右滑意味着一个样本出了窗口,R往右滑意味着一个样本进了窗口L和R都只能往右滑初始L,R都是0,L<=R双端队列的作用,在此时的状态下,R不再动,L往右移,哪些数是最大值的优先级窗口不管L还是R滑动之后,都会让窗口呈现新状况,如何能够更快的得到窗口当前状况下的最大值和最小值?最好平均下来复杂度能原创 2021-05-21 15:53:21 · 175 阅读 · 0 评论