
数据结构与算法
文章平均质量分 67
Watermelon_Mr
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
iterator的使用+求数组中的第n大值+十大经典排序算法
(1)存在问题:数组【1,2,3,4,5,6】也要进行一次冒泡排序。1、删除0到101中可以被2、被3、被5整除的数字。将一个数组中的最大元素不断放在数组中的最后一个位置。2、求一个数组中的第三大值(不能使用排序)四、求一个数组中的第n大值(n为2或者3)1、求一个数组中的第二大值(不能使用排序)(2)方法二:使用iterator删除。(1)方法一:使用for循环遍历删除。不断将数组中的最大元素放在第一个位置。一、iterator的用法。原创 2024-10-04 15:45:38 · 986 阅读 · 0 评论 -
认识Hash表+Hash函数的设计+Hash冲突的处理+Hash表的实现+Java中的equals与hashCode
Hash表(1)如果a.equals(b)返回true,那么a和b的hashCode()必须要相等(2)如果a.equals(b)返回false,那么a和b的hashCode()有可能相等也有可能不相等(3)两个对象相等的必要条件是两个对象的hashCode()相等(4)使用hashCode和equals来共同判断两个对象是否相等。原创 2024-09-28 11:04:21 · 790 阅读 · 0 评论 -
6种常见位运算符+异或运算符的使用(加密、解密)
位运算符进行的是整数与整数之间的运算。原创 2024-09-24 22:19:25 · 447 阅读 · 0 评论 -
BitSet-解决数据压缩问题
1、为了满足使得数据占用的内存更小,可以采用映射的思路,按照某种规则对歌名建立对应的索引,将索引存放在内存空间中,将音乐存放在外部存储器中(硬盘、磁带、光盘)。举例:1个Byte有8个bit,索引位置为5、2、1的位置bit位为1,因此该Byte存储了5、2、1三个数字,Java中二进制的最高位为符号位,不能够进行使用。(2)但是如果使用int类型的字节上的位为0或者为1来用对应位置上的索引来表示所存储的数字,这将会极大地降低对内存的占用。一方面,只在内存中存放索引,将会减小内存的使用;原创 2024-09-24 22:17:32 · 479 阅读 · 0 评论 -
使用红黑树实现Map
三、RBTNode类(红黑树节点)一、Color类(节点颜色)五、TestRBT(测试)二、Pair类(键值对)四、RBT类(红黑树)原创 2024-09-23 18:59:32 · 287 阅读 · 0 评论 -
2-3树、红黑树的定义、红黑树的特性、红黑树的实现(添加+查询)、树的演变
(2)于是我们引入了新的数据结构2-3树,我们引入了3-节点(两个键和3条链接),而且还保留了标准的二分查找树中的节点2-节点(一个键2条链接),每个节点的。红黑树的实现代码看Map底层的红黑树是最标准的,但是想要理解非常困难,在这里我将用一种简化的方式去实现红黑树,使得红黑树具有添加节点和查找节点两个功能。4、不用二叉树作为存储数据库索引的数据结构的原因是二叉树的高度会太高,会造成太多的io操作(从硬盘中查询指定索引的数据)(4)特性四:如果一个节点是红色的,则它的两个子节点必须是黑色的。原创 2024-09-23 18:59:14 · 1229 阅读 · 0 评论 -
使用AVL树实现Map
3、数组------》链表(数组转为链表是为了充分利用内存空间)------》BST(AVL(缺点是在插入节点时需要大量调整))------》RBT。一、数组在裂变扩容时可能会出现环、在数组元素转为链表之后选择尾插法插入节点、数组到链表到AVL到RBT的转换。1、节点:K和V,一对看,Pair(K,V)、height、left、right。解决方案:用删除节点的右子树的最小节点替换掉删除节点。2、情况二:删除节点的左节点为空右节点不为空。3、情况三:删除节点的左节点不为空右节点为空。原创 2024-09-22 18:29:18 · 933 阅读 · 0 评论 -
线段树-认识线段树+实现线段树
(3)如果我们每进行一次加值的操作,就将全部线段树更改一遍,时间复杂度会很高,因此,我们需要进行一个延迟加和的操作。(1)优化代码的思想:要做一件事情的时候,先将这件事情攒着,当到达某一时间点的时候,把攒着的事情一块一做。5、更新线段树中每个节点的sum属性的值(即给原来的每个数组元素的值都加上。(4)具体思路:如果【left,right】区间增加a,在查询时,就。(2)在线段树中,pushDown()方法用于实现。缺点:不能将所有节点的sum属性的值全部正确更新。二、线段树的实现(放数据、查数据)原创 2024-09-21 19:33:23 · 475 阅读 · 0 评论 -
堆-使用offer创建堆和使用heapify创建堆的时间复杂度+堆排序
2、使用heapify创建堆(堆化):时间复杂度为。1、使用offer创建堆:时间复杂度为。一、创建堆的时间复杂度比较。,其中n为满二叉树的结点数。,其中n为满二叉树的结点数。原创 2024-09-21 19:31:48 · 281 阅读 · 0 评论 -
二叉搜索树的判断+平衡二叉树的判断
二叉树 二叉树 二叉树 二叉搜索树。满二叉树 平衡二叉树 二叉搜索树。平衡二叉树(通过判断平衡因子是否超过1)1、判断二叉树是否是。2、判断二叉树是否是。原创 2024-09-15 10:41:22 · 254 阅读 · 0 评论 -
两个常用Map(LinkedHashMap和ConcurrentHashMap)+Map集合的遍历+Map集合中常用方法(getOrDefault()、putIfAbsent()和merge())
三、Map集合中的getOrDefault()、putIfAbsent()和merge()2、方法二:使用value的Collection集合遍历。(1)特点:元素被放入的顺序与元素被遍历取出的顺序一致。1、getOrDefault():Map集合中。2、putIfAbsent():Map集合中。3、方法三:使用Entry的Set集合遍历。1、方法一:使用key的Set集合遍历。(1)特点:单独拿键值,单独拿值。3、merge():Map集合中。则将此新键值对添加到Map集合中。原创 2024-09-10 20:55:53 · 327 阅读 · 0 评论 -
堆-数组的堆化+优先队列(PriorityQueue)的使用
1、在获取堆顶元素和删除堆顶元素的方法中,都必须返回堆顶元素,当堆为空时,返回异常对象要比返回null关键字更加安全。当数组中的元素连续多次进行排序时会消耗大量的时间,将数组变成堆后通过堆排序的方式将会消耗更少的时间。,即对数组进行堆化,这将会避免由于数组容量不足所带来的索引越界问题。以完全二叉树的形式将元素存储到对应的数组位置上所形成的新数组。的方式,但是由于不知道到底数组大小要扩到什么程度,因此会。通过逐个添加元素创建堆的方式来创建堆的时间复杂度为。的问题,为了解决索引越界的问题,我们可以采用。原创 2024-09-07 18:08:58 · 417 阅读 · 0 评论 -
堆(逐个添加元素创建堆)-堆结构的创建+堆结构的实际应用
数组对象(即将数组元素以特殊完全二叉树的形式在数组中进行存储的,特殊在子父结点在数组中的索引会满足一定的数学关系/即元素在数组中存储,但以完全二叉树结点的规律进行使用)一棵完全二叉树(将堆数组中的元素从前向后按照完全二叉树的形式从上向下从左到右进行排列即可得到堆数组等效的完全二叉树)1、数据结构解决的是数据的存储问题,算法解决的是存储了的数据的使用效率问题。(3)父结点索引=(子结点索引-1)/2(除根结点外,根结点没有父结点)(4)构建堆的本质就是利用堆的方式将数组中的元素在数组中进行重新排列。原创 2024-09-06 17:26:12 · 771 阅读 · 0 评论 -
数据结构-二叉树
(2)对于不只有根结点的树,除根结点外,其余结点被分为M(M>0)个互不相交的集合T1,T2,.....Tm,其中每个集合T(i)(1原创 2024-06-09 00:47:28 · 192 阅读 · 0 评论