![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
左神笔记
Bil!
一个自学的IT菜鸟。
展开
-
hash 笔记
哈希函数性质1.哈希函数的输入域是无穷大的2.哈希函数的输出域是有穷尽的,虽然很大,但是是个固定的数值3.当输入参数固定的情况下,得到的输出参数是固定的,他不是随机函数,样本固定得到的输出值也是固定。4.输入不一样,也有可能得到相同的哈希值(哈希碰撞)5.虽然会有两个输入对应同一个输出,但是对于大量的输入对应的输出域基本是平均分的即S域上均匀分布。注意:对于哈希函数来说,有规律的输入并不能得到有规律的输入,例如十个1Mb的字符串,只有最后1byte的内容不一样,在经过哈希函数后.转载 2020-08-25 13:23:03 · 222 阅读 · 0 评论 -
树状DP 笔记
在一棵树中,找结点值的最大和最小可以对树进行一次遍历,在树中找到最大最小值。我们也可以用树状DP来完成。当前结点的最值 由当前结点的值,和左孩子的最值 和 右孩子的最值决定。struct Node{ int value; Node *left = NULL; Node *right = NULL; Node(int data){ value = data; }};struct ReturnData{ int max, min; ReturnData(int Min, i原创 2020-08-22 22:29:28 · 113 阅读 · 0 评论 -
Map 笔记
在c++中有两种映射。unordered_map 和 map 。其中unordered_map 是用 hash 完成的,map 是用 红黑树完成的。unorder_map 可以在O(1) 找到查找的值,map 需要O(log(n))。可是map 是有序的,原创 2020-08-22 15:56:30 · 205 阅读 · 0 评论 -
实现AVL树(模板)
AVL树性质左右子树高度之差的绝对值不超过1,如果超过2了,就不平衡了。平衡因子左右子树高度之差。比如下图,其中蓝色的为结点的平衡因子。插入结点时平衡调整步骤1.找平横因子大于2的结点。2.找插入新结点后,失去平衡等的最小子树。3.平横调整。 //因为新加入了一个节点,所以回溯的时候给这个节点高度 +1 node->height = max(get_height(node->left), get_height(node->right)) + 1;原创 2020-08-16 21:51:09 · 245 阅读 · 0 评论 -
Moris遍历
Morris遍历细节 假设来到当前节点cur,开始时cur来到头节点位置1)如果cur没有左孩子,cur向右移动(cur = cur.right)2)如果cur有左孩子,找到左子树上最右的(为空或者指向自己终止)节点mostRight: a.如果mostRight的右指针指向空,让其指向cur, 然后cur向左移动(cur = cur.left) b.如果mostRight的右指针指向cur,让其指向null, 然后cur向右移动...原创 2020-08-16 17:16:15 · 240 阅读 · 0 评论 -
二叉树的括号表示法、遍历和打印
题目:给你一个括号表示法表示的二叉树,建立一棵用二叉链表方式存储的二叉树,并利用凹凸法进行二叉树的打印;并对其进行遍历(先序、中序、后序和层序),并打印输出遍历结果。例子:正在上传…重新上传取消输入:A(B(C,D(E,F(G))))输出:先序遍历:ABCDEFG中序遍历:CBEDGFA后序遍历:CEGFDBA层序遍历:ABCDEFG代码:#pragma GCC optimize(3,"Ofast","inline")#include<ios..原创 2020-08-15 15:44:24 · 9145 阅读 · 0 评论 -
Manacher算法学习笔记
Manacher算法解决的问题?马拉车算法 Manacher‘s Algorithm 是用来查找一个字符串的最长回文子串的线性方法。Manacher算法的几个概念:1.pArr[] 每个位置上的回文半径。2.R 当前最远右边扩展到的位置。(回文右边界)3.C 得到R 的回文中心。Manacher算法需要处理的情况:1. 当 i 不在回文右边界里面:暴力扩展。2. 当i 在回文右边界里面:a. i' 回文在L,R内 , i 的回文半径 等于 i'的回文半径...原创 2020-08-01 22:05:13 · 142 阅读 · 0 评论 -
KMP学习笔记
KMP算法是一种字符串匹配算法,可以在 O(n+m) 的时间复杂度内实现两个字符串的匹配。我觉得KMP关键就两点:1.实现在匹配的过程中,主串不回退。 2.用最长前缀 等于 最长后缀的性质快速求出next[]数组。我们先看关键点一:为什么要实现,在匹配的过程中,主串不回退??用暴力来解决 洛谷3375 【模板】KMP字符串匹配 这题试试。题目描述给出两个字符串 s1和s2,若s1的区间[l, r]子串与s2完全相同,则称s2在s1中...原创 2020-07-20 18:00:08 · 182 阅读 · 0 评论 -
单调栈学习笔记
单调栈可以做什么?单调栈可以找在一个数组arr中,找arr[i] 左边离他最近比它大(小)的数,和arr[i]右边离他最近比他大(小)的数。单调栈怎么实现?保证数组arr 中每个元素都进栈有且仅有一次。建立一个栈s,保证栈中元素排列是不严格递减的。遍历数组,1.如果arr[i] 比栈顶元素小,说明把arr[i] 压入栈中,不会破坏栈中元素排列是递减的规则,arr[i] 可以压入栈中。2.如果arr[i] 与 栈顶元素相同,我们直接把arr[i] 压入栈中。3.如果arr[i.原创 2020-08-11 17:20:24 · 174 阅读 · 0 评论 -
滑动窗口、尺取法学习笔记
滑动窗口解决什么问题?1. 需要输出或比较的结果在原数据结构中是连续排列的;2. 每次窗口滑动时,只需观察窗口两端元素的变化,无论窗口多长,每次只操作两个头尾元素,当用到的窗口比较长时,可以显著减少操作次数;3. 窗口内元素的整体性比较强,窗口滑动可以只通过操作头尾两个位置的变化实现,但对比结果时往往要用到窗口中所有元素。滑动窗口、尺取法关系?尺取法就是双指针(two points)嘛。而滑动窗口也要用到二个指针,所以滑动窗口是一种特殊的尺取法。经典例题:leetco..原创 2020-08-06 17:56:58 · 378 阅读 · 0 评论 -
BFPRT算法学习笔记
BFPRT算法解决的问题?在O(N)内找到一个数组中找出第k大或第k小的数。BFPRT算法的思想:把数组每五个分为一组,分成大概N / 5 组,对每组进行排序。每组的中位数构成数组medians[] ,用BFPRT找到medians[] 的中位数。不能排序再找它的中位数,因为排序算法复杂度为O(n*log(n)) , 而medians[] 的数据规模是 N/ 5 的。用了那么复杂度就为O(n*log(n))了。记每组的中位数的中位数为pivot , 用pivot 作为标准进行..原创 2020-08-02 19:02:59 · 273 阅读 · 0 评论