![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 64
etcEriksen
What hurts more.The pain of hard work or the pain of regret?
展开
-
手写HashMap 手撕哈希表
手写HashMap,手撕哈希表原创 2022-08-29 12:00:01 · 129 阅读 · 0 评论 -
用红黑树实现Map
红黑树实现Map原创 2022-08-26 11:21:36 · 234 阅读 · 0 评论 -
手写红黑树_手写AVL树_手写平衡二叉搜索树
手写红黑树,手写AVL树,手写二叉搜索树原创 2022-08-23 14:21:48 · 118 阅读 · 0 评论 -
双向链表
public class Eriksenn { class Node{ public int data; //保存双向链表的后驱信息 public Node prev; //双向链表的前驱 public Node next; public Node (int data){ //创建构造方法 保证data为我们所用的值 this.data=da...原创 2021-10-18 20:58:04 · 85 阅读 · 0 评论 -
单链表
1.单链表下一个节点的引用即是存放下个节点的地址 以便于连成一个链表初始化属性提供一个带有data next 的构造方法 以便于后面使用class Node{ public int data; public Node next; public Node(int data){ this.data=data; //next为一个引用 因此须默认为null 以便于后面使用 this.next=null; }.原创 2021-10-15 15:17:37 · 470 阅读 · 2 评论 -
单链表习题
第一个圈 ListNode相当于之前的Node 一个引用类 到之后形成一个节点第二个圈 定义了两个域 相当于之前的data和next第三个是 一个构造方法 便于之后用 域ListNode表示一个返回值1.移除链表元素代码如下:public class Eriksenn{ public class ListNode{ int val; ListNode next; ListNode(int x){ ...原创 2021-10-18 14:12:32 · 172 阅读 · 0 评论 -
布隆过滤器 跳表
哈希表的缺点就是在于占用的空间内存比较多 :举个例子:有可能存储2个元素 最后哈希表使用了十个数组空间的大小因为它是为了减少哈希冲突而把空间搞大一点但是时间复杂度较低———————————————————————————————————————————查询元素是否存在:第一条:如果有一个位置哈希函数生成索引位置对应的值是不为1的 那么这个元素肯定不存在第二条:因为有可能这个索引位置对应的值:这个1不一定是同一个元素生成的有可能是A 生成的1 ...原创 2021-12-15 20:29:31 · 754 阅读 · 0 评论 -
动态规划
大数乘法细节1:这里的个位数表示的意思是一位数的相乘举个例子:36*89 一位数的相乘:9*6 9*3 8*6 8*3一共四次一位数的相乘故为n^2次个位数的相乘细节2:大数乘法得出的数字相加的时候 我们应该对齐取每一位的一串字符数字进行相加一列一列的相加,,,,,,,,,,而不是盲目直接相加细节3:大数乘法进行一位数相乘之后 对于补0补几个的问题举个例子:36*546*4 6和4都是个位的数字 不补03*4 3是...原创 2021-12-11 21:31:15 · 324 阅读 · 0 评论 -
贪心 分治
贪心典型应用:排序的时候:用Arrays类Arrays.sort(数组名)表示从小到大进行排序数组。。。package 刷题.日常文字题.贪心问题;public class 加勒比海盗 { public static void main(String[] args) { int [] weights={3,5,4,10,7,14,2,11}; int newweight=0;//定义新重量 int capacity ..原创 2021-12-09 00:38:49 · 456 阅读 · 0 评论 -
回溯_八皇后问题
嘿嘿:八皇后问题:首先要明白规则:在国际象棋中 一个皇后的攻击范围是 同一行同一列和同一斜线上的所有位置我们用回溯来解决这个问题,特别优化了。。。。四皇后:4*4宫格一个字:cao!慢慢理解就行 记住这种思想,,,第一步:假设在第一行第一列选一个记作为第一个皇后所在位置然后选下一个 注意攻击范围确定第二个皇后所在位置此时发现第三个皇后无法再放了 ok:回溯到第二个皇后位置 让第二个皇后再选一个位置。。。。。。。。多看几遍 多思考一...原创 2021-12-08 19:57:15 · 535 阅读 · 0 评论 -
递归
函数每调用一次就会在栈空间上开辟一块内存当一个函数调用完成的时候 它在栈空间上的内存就会消失那么就来到它的前面一个去执行以此类推 直到全部执行完毕 流程结束。。。空间复杂度:空间复杂度就是在栈空间叠加起来的内存空间大小当sum(n)时 这个传递的是n那么就递归n次 复杂度就是O(n)级别直到一个函数递完之后即是执行到return 因为返回的时候才是调用完成。。。之后再进行归,,,,,,用递归不一定是最优的解决方案:递归的基本思想:递归就...原创 2021-12-08 13:56:51 · 406 阅读 · 0 评论 -
图 第一部分
原创 2021-12-05 18:21:40 · 600 阅读 · 0 评论 -
二叉堆
最大堆_二叉堆:最小堆_二叉堆堆的特征:add:这个过程的时间复杂度是根树的高度有关是logn级别add代码: private void elementsNullCheck(E e){ if(e==null){ throw new IllegalArgumentException("element must not be null"); } } @Override...原创 2021-12-04 21:52:30 · 273 阅读 · 0 评论 -
并查集
但是这些复杂度也是过高并查集概念:两种操作方法:各有利弊。。。。但是开发中通常使用Quick Union对于集合的分布解释一点:数组里面的元素代表的是外面元素 0到7的父节点看是否是同一个集合主要就是观察是否是有相同的根节点倘若根节点是相同的 那么这两个元素就是属于同一个集合初始化操作:把每一个元素都搞成一个单元素集合Union操作:我们规定union(1,0) 意思是左边的1这个元素的父节点变成右边元素0...原创 2021-12-03 20:25:34 · 279 阅读 · 0 评论 -
链表
链表是一个一个元素的添加的每一个节点都是用到时 才会进行分配内存空间由于动态数组和链表中 接口方法是相同的但是实现的代码是不一样的因此我们定义一个接口List实现这个接口的每一个类都应该实现这个接口中的所有方法插播一条Java语法的问题:我们的动态数组ArrayList和链表LinkedList都是实现于List的因此我们可以用类似于多态的形式进行new接口设计:clear:next不需要设置为null因为当s...原创 2021-12-01 22:47:13 · 766 阅读 · 0 评论 -
动态数组
当我们不加static修饰的时候我们需要创建一个对象才可以去访问这里ArrayList是一个类名当是用static修饰的方法的时候 我们用类名.方法名进行访问即可清空的时候我们直接:因为这条代码就已经告诉外界 我们动态数组的元素数量已经是0了 不可以再继续使用这样我们可以在内部继续使用 也是一种节省空间的操作删除元素:把后面的元素往前挪就行了注意一点:把77的值赋值给前面一个的时候那么77怎么处理?不处理即可 因为si...原创 2021-11-30 21:34:26 · 376 阅读 · 0 评论 -
B树和红黑树
给定一个假想出来的节点都是黑色节点这是为了让这棵树变成真二叉树即是要么度为0 要么度为2懵逼了。。。。。。。。先学B树:解释一下:为什么说它拥有二叉搜索树的一些性质?看3阶B树:比23小的都在左边 处于比23大但比30小的在中间比30大的在右边还有一点:这个m的意思就是这个树的节点最多拥有m个子节点向上取整和向下取整的符号:1.这是向上取整2.这是向下取整数据库中的B树:一般是200到300阶左右把二叉搜......原创 2021-11-29 01:37:54 · 665 阅读 · 0 评论 -
AVL树
先看一下二叉搜索树的复杂度分分析当我们添加元素到二叉搜索树中时:寻找的次数只与树的高度有关 与树的节点数并无大的关系复杂度:O(logn)==O(h)有点像二分 一半一半的排除查找 因此为O(logn)但是也存在最坏的情况:当n非常大的时候我们可以看出两种情况下搜索的性能相差甚远解决办法:平衡:所谓更平衡就是:左右子树的高度差越来越小如何改进平衡二叉树?改进的规则:AVL树:...原创 2021-11-16 22:22:11 · 451 阅读 · 2 评论 -
二叉树 Binary Tree
我怀着激动的心 走上了这颗树今天是2021年11月12日今天开始上树!!!!!!生活中的树形结构:树:根节点:一棵树有且只有一个根节点就是最上面的节点兄弟节点:每一行的节点 它们具有相同的父节点 那么就被称之为兄弟节点子树的概念:注意:红色部分就是我们所说的子树什么是左子树和右子树呢?举个例子:5的左子树就是51 右子树就是52再比如说 2的左子树为21 右子树为22包含的红色区域的那一颗比如说2的度就是2 因为...原创 2021-11-14 21:49:06 · 1238 阅读 · 0 评论 -
二叉搜索树
补充一点:二分搜索为什么时间复杂度为O(logn)?二分搜素:顾名思义可知它是一半一半的搜素排查那么每一次排除一半 那么假设有n个那么我们循环就需要多少次才可以把n除尽呢?上述的问题也等价于2的多少次方等于n呢?很明显 log2n次(注意这里2是下标)大O法可知:循环的时间复杂度为O(logn)由于这两种情况下都各有缺点因此我们引入了二叉搜索树可以把搜索 添加 删除的时间复杂度 最坏的情况都维护在O(logn)处二叉搜索树的节点大小规则:举个...原创 2021-11-15 00:10:16 · 806 阅读 · 0 评论 -
数组中只出现一次的数字
本题算法思想 用异或^ 异或的本质就是 二进制位相同的为0 不相同则为1首先我们需要知道 0^1==1 0^2==2 即是0异或所有数还是等于那个数本身其次 两个相同的数进行异或时结果为01.创立一个主函数 public static void main(String[] args){ int[] array={1,2,3,3,2,4}; int len= array.length; int[] ret=find(array);原创 2021-10-12 10:23:34 · 204 阅读 · 2 评论 -
复杂度
1.斐波那契数方法一 递归的思想但这种方法存在弊端 当递归很多次时 会导致栈溢出方法二这种方法解决了空间压栈问题对比方法一和二引入批判算法好坏的度量例子1.总结 先看上面的循环 三个循环你只能执行一个if语句 执行一次 因此是1次‘看下面 for循环 int i=0执行一次 i<4执行4次 i++执行4次打印结果执行4次 下面执行1+4+4+4次O(1)2.同理 起始条件int i=0执...原创 2021-11-01 20:39:18 · 95 阅读 · 0 评论