
数据结构/算法
文章平均质量分 60
模拟stl实现
JayceSun449
这个作者很懒,什么都没留下…
展开
-
位图,布隆过滤器的原理和实现
比方说现在有40亿个未排序的无符号整数,请问如何判断一个数是否存在于这40亿个数中?这个问题就很适合用位图来解决,题目中说这些数据都是无符号整数而无符号整数最大能取到0xffffffff(约43亿),并且题目只要求我们判断该数据是否存在,因此我们只需要用一个比特位来标识该数值是否存在即可如上图,插入了1, 3, 7三个数据,我们只要把第1, 3, 7个比特位赋值1即可。原创 2022-09-03 19:36:43 · 282 阅读 · 0 评论 -
数据结构篇【5】——哈希表开散列实现(哈希桶)及封装
在上一篇文章中我们解决哈希冲突的方法是闭散列,在本篇介绍另一种方法——开散列。在闭散列中如果我们碰到哈希冲突的时候我们采用的办法是向后查找,并占用另一个空余的位置,这种方法不好的地方就在于在不断的占用中哈希表的位置看起来好像没什么逻辑,而且容易产生“堆积”问题,导致查找元素的效率较低,另外我们始终要保证已经占用的位置不多于哈希表总大小的70%,因此还会造成较大的空间浪费。 开散列又叫链地址发(开链法、哈希桶),首先对关键码集合用散列函数计算散列地址,具有相同地址的关键码归于同一子集合,每一个子集合称为一个桶原创 2022-06-28 20:08:23 · 503 阅读 · 1 评论 -
数据结构篇【4】——哈希(散列)线性探测实现
构造一种存储结构,通过某种函数(hashFunc)使元素的存储位置与它的关键码之间能够建立一一映射的关系,那么在查找时通过该函数可以很快找到该元素。最理想的情况是可以不经过任何比较,一次直接从表中得到要搜索的元素。对于两个数据元素的关键字ki和kj(i != j),有ki != kj,但有Hash(ki) == Hash(kj),即:不同关键字通过相同哈希函数计算出相同的哈希地址,这种现象称为哈希冲突或哈希碰撞。 把具有不同关键码而具有相同哈希地址的数据元素称为“同义词”。引起哈希冲突的一个原因可能是:哈希原创 2022-06-27 14:08:52 · 1649 阅读 · 0 评论 -
WY16 不要二
二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。 对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为: ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根 小易想知道最多可以放多少块蛋糕在网格盒子里。 输入描述: 每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000) 输出描述: 输出一个最多可以放的蛋糕数 #include <i原创 2022-03-27 14:45:49 · 119 阅读 · 0 评论 -
JZ31统计回文
“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。如果字符串B插入的位置不同就考虑为不一样的办法。 例如: A = “aba”,B = “b”。这里有4种把B插入A的办法: 在A的第一个字母之前: “baba” 不是回文 在第一个字母‘a’原创 2022-03-27 12:53:00 · 108 阅读 · 0 评论 -
最小栈minStack
设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int top() 获取堆栈顶部的元素。 int getMin() 获取堆栈中的最小元素。 示例 1: 输入: [“MinStack”,“push”,“push”,“push”,“getMin”,“pop”,“top”,“getMin”] [[],原创 2022-03-27 10:44:20 · 467 阅读 · 0 评论 -
栈的压入弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。 0<=pushV.length == popV.length <=1000 -1000<=pushV[i]<=1000 pushV 的所有数字均不相同 class Solution { public: bo原创 2022-03-27 11:38:02 · 335 阅读 · 0 评论 -
红黑树原理
目录红黑树红黑树的性质节点结构插入规则 红黑树 与上一篇文章说的AVL树类似,红黑树也是一种可以平衡高度的搜索树,不同点在于红黑树通过控制节点的颜色来调节搜索树的高度。 红黑树的性质 1.每个节点不是红色就是黑色 2.根节点是黑色的 3.不能有连续的红色节点 4.对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。 5.每个叶子节点都是黑色的(这里的叶子节点指的是空节点) 当满足这些性质时,就可以保证红黑树中最长路径高度不超过最短路径的两倍。我们可以想象在红黑树中每条路径黑色节点原创 2022-05-30 14:51:38 · 228 阅读 · 1 评论 -
map&set的封装
map和set都是用红黑树来实现的,不同点在于map中存储了key和value而set中只存储了key值,但是总的来看他们的结构是非常类似的,因此我们可以像一个办法让红黑树代码可以同时被map和set使用。 主要思路 上一篇中我们给红黑树节点的模板是: template<class T> struct RBTreeNode 我们仅用一个T类模板来存储数据,也就是说,我们在map中T代表的是pair<key, value>,而在set中代表的则是key值。存储方式很好处理,但是在插入原创 2022-05-30 15:24:35 · 111 阅读 · 1 评论 -
模拟实现AVL树插入操作
目录avl树结构插入旋转左旋转左单旋代码右旋转右旋转代码右左双旋右左双旋代码左右双旋左右双旋代码insert代码 avl树 本文展示的是通过平衡因子控制高度的avl树。 平衡因子(balance factor简称bf)等于右子树高度-左子树高度,我们要控制树中的所有平衡因子都小于等于1。 结构 树中节点的成员如下 template<class K, class V>// k为键值 struct AVLTreeNode { // 本树使用三叉链可方便操作 AVLTreeNode<K, V&原创 2022-05-21 17:17:48 · 520 阅读 · 0 评论