数据结构与算法
文章平均质量分 88
一步一步学习数据结构与算法,深入理解
熬夜磕代码丶
我变秃了,也变强了
展开
-
一、二维前缀和算法
给定一个整数数组 nums 和一个整数 k ,返回其中元素之和可被 k 整除的(连续、非空) 子数组 的数目。i - k原创 2023-07-21 17:07:43 · 739 阅读 · 29 评论 -
位运算常见算法题
本篇文章会涉及多道位运算题目,由简到难,大家可以跟着练习一下。原创 2023-07-15 17:57:58 · 1174 阅读 · 19 评论 -
反射、枚举和lambda表达式
我们创建一个Color枚举类型}优点:将常量组织起来统一进行管理场景:错误状态码,消息类型,颜色的划分,状态机等等…本质:是 java.lang.Enum 的子类,也就是说,自己写的枚举类,就算没有显示的继承 Enum ,但是其默认继承了这个类。1、枚举本身就是一个类,其构造方法默认为私有的,且都是默认继承与 java.lang.Enum2、枚举可以避免反射和序列化问题3、枚举实现单例模式是安全的枚举常量更简单安全。枚举具有内置方法 ,代码更优雅不可继承,无法扩展。原创 2022-10-31 08:59:26 · 3467 阅读 · 76 评论 -
万字详解map与set
在数组中是通过数组下标来对 其内容进行索引的,而Map是通过对象来对 对象进行索引的,用来 索引的对象叫键key,其对应的对象叫值value;一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对,所以。HashMap中的元素是没有顺序的;TreeMap中所有的元素都是有某一固定顺序的,如果需要得到一个有序的结果,就应该使用TreeMap;如果重写了hashCode方法,不同的对象只要属性相同,计算出来的哈希值就是一样的。原创 2022-10-26 09:12:21 · 1657 阅读 · 77 评论 -
二叉搜索树的实现
二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:1.若它的左子树不为空,则左子树上所有节点的值都小于根节点的值2.若它的右子树不为空,则右子树上所有节点的值都大于根节点的值3.它的左右子树也分别为二叉搜索树。原创 2022-10-24 10:42:25 · 1272 阅读 · 18 评论 -
十大排序算法(java实现万字详解)
什么是排序的稳定性?稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。原创 2022-10-21 08:56:52 · 4311 阅读 · 86 评论 -
经典Java面试常见题
1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继2.返回链表中的第一个节点的指针3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构4.你不用输出双向链表,程序会根据你的返回值自动打印输出原创 2022-10-19 10:10:55 · 1823 阅读 · 26 评论 -
深入理解PriorityQueue的特性
Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列,PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的原创 2022-10-17 09:24:13 · 1131 阅读 · 76 评论 -
java优先级队列(堆)
堆严格意义上来说又叫二叉堆(Binary Heap),因为它的结构是一颗完全二叉树,堆一般分为最大堆和最小堆。堆性质:结构性:堆是一颗除底层外被完全填满的二叉树,底层的节点从左到右填入,这样的树叫做完全二叉树。即缺失结点的部分一定再树的右下侧。堆序性:由于我们想很快找出最小元,则最小元应该在根上,任意节点都小于它的后裔,这就是小顶堆(Min-Heap);如果是查找最大元,则最大元应该在根上,任意节点都要大于它的后裔,这就是大顶堆(Max-heap)。原创 2022-10-15 12:31:35 · 3592 阅读 · 32 评论 -
二叉树非递归遍历
给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。原创 2022-10-12 17:49:01 · 832 阅读 · 32 评论 -
二叉树重点突破
遍历root每一个结点去和子树subRoot去判断是否为相同的树,如果相同返回true,否则继续遍历,如果遍历结束还没有找到,那就返回false,这里可以复用上一题相同树的代码。否则,返回 false。遍历二叉树,去判断二叉树每个结点的左右子树的高度差,如果小于2那么在判断左子树和右子树,如果有任何一个结点不满足,那么就不是平衡二叉树,如果每一个结点都满足那么就是平衡二叉树。二叉树是否对称分解为左子树和右子树是否对称相等,然后在左子树的左节点和右子树的右节点,左子树的右节点和右子树的左节点是否相等。原创 2022-10-10 10:34:46 · 21247 阅读 · 82 评论 -
二叉树难题破解
编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。原创 2022-10-08 10:53:13 · 27177 阅读 · 33 评论 -
二叉树的基本操作
序遍历的顺序是:根节点-》左子树 -》右子树,这里我们用递归实现。先去判断结点是否为空,如果为空直接返回,不为空,先打印根节点,然后去遍历左子树,然后遍历右子树。原创 2022-10-06 13:03:55 · 5115 阅读 · 89 评论 -
带你了解二叉树
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:有一个特殊的结点,称为根结点,根结点没有前驱结点除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合 Ti (1原创 2022-10-02 11:42:16 · 6793 阅读 · 50 评论 -
java详解队列
队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出FIFO(First In First Out) 入队列:进行插入操作的一端称为队尾(Tail/Rear) 出队列:进行删除操作的一端称为队头(Head/Front)原创 2022-09-30 08:21:09 · 5132 阅读 · 50 评论 -
从0到1带你了解栈
栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。出栈:栈的删除操作叫做出栈。出数据在栈顶。原创 2022-09-26 14:36:08 · 4500 阅读 · 81 评论 -
java实现双链表
双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。LinkedList底层就是一个双向链表,我们来实现一个双向链表。原创 2022-09-24 17:15:03 · 599 阅读 · 54 评论 -
java实现扑克牌
我截取了部分图片,我们可以发现这是一副新牌,按照花色大小放着,我们玩扑克的时候肯定要打乱扑克牌。定义一个花色color变量和一个大小rank变量。想不想带上好朋友来上一局三人扑克呢。这个方法负责将扑克牌打乱。原创 2022-09-21 11:09:02 · 3223 阅读 · 57 评论 -
深度解析ArrayList使用
ArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。ArrayList 继承了 AbstractList ,并实现了 List 接口。原创 2022-09-19 08:54:55 · 10044 阅读 · 88 评论 -
java实现顺序表
如果我们的顺序表为空时,手动抛出空引用异常} }} // 打印顺序表 public void display() {i ++) {} // 新增元素,默认在数组最后新增 public void add(int data) throws NullException {//1.数组为空,报空异常 if(isEmpty()) {throw new NullException("数组为空");} //2.数组满了,先增容 if(isFull()) {原创 2022-09-17 08:52:26 · 3727 阅读 · 62 评论 -
泛型的通配符
如果没有指定类型的边界,可以认可 T extends Object,当指定了某个类型为上界,那么只接受某类型本身和子类型作为E的类型实参原创 2022-09-15 14:46:08 · 1896 阅读 · 84 评论 -
泛型擦除机制
集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象,所以在JDK1.5之前只能把元素类型设计为Object,JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定,其他的部分是确定的,例如关于这个元素如何保存,如何管理等是确定的,因此此时把元素的类型设计成一个参数,这个类型参数叫做泛型。Collection,List,ArrayList 这个就是类型参数,即泛型原创 2022-09-12 09:23:06 · 1907 阅读 · 76 评论 -
初识数据结构——时间复杂度
正如封清扬所言:数据结构是一门费脑子的课,你若遇到困惑不解的地方,都是正常的,就像你乘飞机去旅行,在飞机场晚点几个钟头,上了飞机又颠簸恐慌一样,别大惊小怪,都很平常,只要能安全到达就是成功。原创 2022-09-09 08:30:00 · 1294 阅读 · 51 评论