- 博客(33)
- 资源 (1)
- 收藏
- 关注
原创 ⼯⼚⽅法模式
工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。:将对象的创建逻辑封装在工厂类中,使得客户端不需要知道具体的实现类,只需要知道工厂类即可。:当需要新增产品时,只需要添加一个具体的产品类和一个相应的工厂类,无需修改现有的工厂类。:将具体的产品类与使用产品类的客户代码分离,使得客户代码依赖于抽象,而不是具体实现。1、普通⼯⼚模式:建⽴⼀个⼯⼚类,对实现了同⼀接⼝的⼀些类进⾏实例的创建;
2024-09-04 16:16:50
297
原创 java数据结构之变量互换
定义两个变量,在不适用第三个变量的情况下将两个变量互换。方法一:数学加减运算方式compute方法。方法二: 位运算异或方式XOR方法。
2024-09-03 17:41:01
271
原创 Java算法之判断平衡二叉树
判断一棵二叉树是否是平衡二叉树(即AVL树)是一个常见的问题。平衡二叉树的定义是:对于树中的每个节点,其左右子树的高度差不超过1。我们可以通过递归的方法来判断一棵二叉树是否是平衡的。
2024-09-03 17:20:50
251
原创 Java算法之LRUCache缓存实现
实现一个LRU(最近最少使用)缓存可以通过使用HashMap和双向链表来实现。HashMap用于快速查找缓存中的元素,而双向链表用于维护元素的使用顺序。2.使用双向链表维护元素的使用顺序,最近使用的元素放在链表头部,最少使用的元素放在链表尾部。5. 定义一个内部类 Node,用于表示缓存中的每个元素。3. 每次访问或插入元素时,将该元素移动到链表头部。get和put操作的时间复杂度均为O(1)。1.使用HashMap存储键值对,以便快速访问。4.当缓存容量达到上限时,移除链表尾部的元素。
2024-09-03 17:06:53
575
1
原创 Java算法之BogoSort(或称为Permutation Sort、Monkey Sort)
BogoSort,又称为猴子排序或排列排序,是一种通过随机打乱数组直到它变得有序的排序算法。这种算法的效率极低,通常不用于实际的排序任务,而是作为算法教学中的一个有趣案例,或者在需要随机性的场景下使用。
2024-08-30 10:15:27
421
原创 Java算法之TimSort
TimSort是一种高效的排序算法,由Tim Peters于2002年设计,主要特点是结合了归并排序(Merge Sort)和插入排序(Insertion Sort)的优点。这种算法在很多编程语言的默认排序函数中得到应用,如Python的sort()和Java的。TimSort作为一种混合排序算法,它结合了归并排序和插入排序的优点,提供了一种高效且稳定的排序策略。虽然它的实现相对复杂,但其卓越的性能和稳定性使其成为许多编程语言和库中默认的排序算法。
2024-08-29 17:16:02
910
原创 Java算法之循环排序(Cyclic Sort)
循环排序(Cyclic Sort)是一种最小化移动次数的原地排序算法,它利用了数组元素的初始顺序。如果一个元素不在它最终应该在的位置,循环排序会找到这个元素应该在的位置,并将该位置的元素交换过来,直到这个循环结束。这个过程会将整个循环中的所有元素放到正确的位置上。
2024-08-29 17:13:59
466
原创 Java算法之梳排序(Comb Sort)
梳排序(Comb Sort)是冒泡排序的一个变种,其核心思想是在比较相邻元素之前先进行更大步长的比较。这种算法的名称来源于其工作方式类似于梳头发时的动作,先大范围地移动,然后逐渐减小移动的步长,直至相邻。梳排序是一种简单有效的改进冒泡排序的方法,通过引入更大的步长来减少不必要的比较。虽然它在最坏情况下的性能并不比冒泡排序好很多,但在实际应用中,它通常能够更快地处理数据。
2024-08-29 17:12:10
391
原创 Java算法之Gnome 排序
Gnome 排序,又称为双向插入排序或鸡尾酒排序,是一种改进的插入排序算法。它在每次迭代中不仅将最小的元素移动到前面,同时也将最大的元素移动到后面。这种排序算法在每次迭代中同时向两个方向进行移动,因此得名。
2024-08-29 17:10:32
585
原创 Java算法之鸡尾酒排序(Cocktail Sort,或称为双向冒泡排序)
鸡尾酒排序,又称为双向冒泡排序或搅拌排序(Cocktail Sort),是冒泡排序的一个变体。它在每一轮排序中,不仅将最大的元素“冒泡”到序列的一端,同时也将最小的元素“沉降”到序列的另一端。这种排序算法得名于调酒师搅拌鸡尾酒的动作,既向一个方向搅拌,也向相反方向搅拌。鸡尾酒排序作为一种稳定的排序算法,虽然在实际应用中的效率不如一些更高级的排序算法,但它的原理简单,易于实现,且对于部分有序的数据集表现良好。
2024-08-29 17:08:43
459
原创 Java算法之基数排序(Radix Sort)
基数排序是一种非比较型整数排序算法,其原理是按照低位先排序,然后收集,再按照高位排序,再收集,依次类推,直到最高位。这种方法可以视为对每个位上的数字进行稳定的排序。
2024-08-29 17:03:24
491
原创 Java算法之桶排序(Bucket Sort)
桶排序是一种分布排序算法,它将原始数据分布在有限数量的桶里,每个桶再分别进行排序。桶排序在数据分布均匀的情况下非常高效,尤其适用于处理大量数据。桶排序是一种高效的排序算法,尤其适用于数据分布均匀的情况。通过合理地分配桶和对每个桶进行排序,桶排序可以显著提高排序效率。然而,它对数据分布的敏感性也限制了其在某些场景下的应用。
2024-08-29 16:22:34
410
原创 Java算法之计数排序(Counting Sort)
计数排序是一种线性时间复杂度的排序算法,它不依赖于元素之间的比较,而是通过统计数组中每个元素出现的次数,然后根据这些统计信息对元素进行排序。这种算法特别适用于整数且整数的范围不是非常大时。
2024-08-29 16:19:54
1204
原创 Java算法之堆排序(Heap Sort)
堆排序是一种基于比较的排序算法,它使用二叉堆数据结构来实现。二叉堆是一种特殊的完全二叉树,其中每个父节点的键值都大于(或等于)其子节点的键值(大顶堆),或者小于(或等于)其子节点的键值(小顶堆)。堆排序通过维护堆的性质来高效地组织数据,从而实现排序。堆排序是一种高效的排序算法,尤其适合处理大数据集和实现优先队列。虽然它不是稳定的排序算法,但其原地排序的特性和对并行化的支持使其在许多应用场景下非常有价值。
2024-08-29 16:17:25
792
原创 Java算法之快速排序(Quick Sort)
快速排序是一种分而治之的排序算法,由C. A. R. Hoare在1960年提出。它通过选取一个元素作为"基准"(pivot),然后重新排列数组,使得所有比基准值小的元素都在基准的左边,所有比基准值大的元素都在基准的右边。这个过程称为分区(partitioning)。之后,递归地对基准左边和右边的子数组进行同样的操作。
2024-08-29 16:15:12
679
原创 Java算法之归并排序(Merge Sort)
归并排序是一种采用分治法的排序算法,它将排序问题分解为多个较小的子问题来解决,然后将这些子问题的解合并以得到原问题的解。归并排序以其稳定性和高效率而著称,尤其适用于大数据集的排序。归并排序是一种非常强大的排序算法,它通过分治法有效地解决了大规模数据集的排序问题。虽然它需要额外的内存空间,但其稳定性和高效率使其成为许多应用场景下的首选算法。
2024-08-29 16:12:40
721
原创 Java算法之希尔排序(Shell Sort)
希尔排序,又称为缩小增量排序,是插入排序的一种改进算法。它通过引入增量序列,将原始数据序列分成多个子序列,对每个子序列进行插入排序,然后逐渐减小增量,直到增量为1,完成整个排序过程。
2024-08-29 16:10:01
595
原创 Java算法之插入排序(Insertion Sort)
插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。这个过程像打牌时整理手中的牌一样,逐步将数据排列成有序。插入排序虽然在实际应用中的效率不如一些更高级的排序算法,但它的原理简单,易于实现,且对于部分有序的数据集表现良好。
2024-08-29 16:08:24
3719
原创 Java算法之选择排序(Selection Sort)
选择排序是一种简单直观的排序算法,它的工作原理是每次从待排序的数据元素中选出最小(或最大)的一个元素,然后放到序列的起始位置。通过重复这个过程,直到所有元素都被排序。
2024-08-29 16:06:18
757
原创 Java算法之冒泡排序(Bubble Sort)
冒泡排序是一种基础的排序算法,以其简单性和直观性而著称。它通过重复遍历待排序的数列,比较每对相邻元素,并在必要时交换它们的位置,从而实现排序。冒泡排序虽然在实际应用中的效率不高,但它的原理简单,适合作为学习排序算法的入门点。在实际开发中,我们通常会根据数据的特点和性能要求选择更合适的排序算法。通过理解冒泡排序,我们可以更好地把握排序算法的基本概念和设计原则。
2024-08-29 16:03:51
760
原创 java算法之体育馆找位置
在一个大型体育场内举办了一场大型活动,由于疫情防控的需要,要求每位观众的必须间隔至少一个空位才允许落座。现在给出一排观众座位分布图,座位中存在已落座的观众,请计算出,在不移动现有观众座位的情况下,最多还能坐下多少名观众。0 表示该座位没有坐人,1 表示该座位已经坐人。输出描述:整数,在不移动现有观众座位的情况下,最多还能坐下多少名观众。示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例。示例 2 输入输出示例仅供调试,后台判题数据一般不包含示例。备注:1
2024-08-23 16:15:35
327
原创 Java算法只转盘寿司
寿司店周年庆,正在举办优惠活动回馈新老客户寿司转盘上总共有 n 盘寿司,prices [i] 是第 i 盘寿司的价格,如果客户选择了第 i 盘寿司,寿司店免费赠送客户距离第 i 盘寿司最近的下一盘寿司 j,前提是 prices [j] < prices [i],如果没有满足条件的 j,则不赠送寿司。输入的每一个数字代表每盘寿司的价格,每盘寿司的价格之间使用空格分隔寿司的盘数 n范围为:1<=n <= 500。输出描述输出享受优惠后的一组数据,每个值表示客户选择第 i 盘寿司时实际得到的寿司的总价格。
2024-08-23 13:47:20
189
原创 Java算法之找出作弊的人
每一行代表一个集合,每个集合内的员工ID按顺序排列,多行结果也以员工对中p1值大小升序排列(如果p1相同则p2升序)公司组织了一次考试,现在考试结果出来了,想看一下有没人存在作弊行为,但是员工太多了,需要先对员工进行一次过滤,再进一步确定是否存在作弊行为。输入:第一行为员工个数n,后续的n行第一个数值为员工ID,第二个数值为员工考试分数。输出:员工1和员工2的分差为1,员工3和员工4的分差也为1,因此最终结果为。过滤的规则为:找到分差最小的员工ID对(p1,p2)列表,要求p1
2024-08-07 16:59:37
485
原创 Java算法之密码检测
请你编写程序,输出最终得到的密码字符,并判断密码是否满足如下的密码安全要求。5.密码至少需要包含 1 个字母和数字以外的非空白特殊字符。2.密码至少需要包含 1 个大写字母;3.密码至少需要包含 1 个小写字母;4.密码至少需要包含 1 个数字;6.密码不能包含连续相同的字符。1.密码长度>=8;
2024-08-07 16:07:44
276
原创 Java算法之数据单元的变量替换
将一个csv格式的数据文件中包含有单元格引用的内容替换为对应单元格内容的实际值。说明:第二个单元中有对A单元的引用,A单元格的值为1,替换时,将A单元的内容替代的位置,并和其他内容合并。2.每个单元格的内容包含字母和数字,以及使用 分隔的单元格引用,例如:表示引用第一个单元的值。6.不存在多重 的情况,一个单元格只能引用一个其他单元格。4.引用单元格的位置不受限制,运行排在后面的单元格被排在前面的单元格引用。输出:输出所有单元格展开的内容,单元格之间用逗号分隔。
2024-08-07 14:15:20
235
1
原创 Java算法之山脉数量
给定一个数组,数组中的每个元素代表该位置的海拔高度。0表示平地,>=1时表示属于某个山峰,山峰的定义为当某个位置的左右海拔均小于自己的海拔时,该位置为山峰。数组起始位置计算时可只满足一边的条件。示例1: 输入: [0,1,2,3,2,4]输出描述 输出符合条件的山峰的个数。输入: [3,0,3,4,1]输入描述 一个整数数组。
2024-08-07 13:57:25
215
原创 idea启动报错“Address already in use: bind”
idea启动报错“Address already in use: bind”
2024-08-06 08:49:34
505
原创 Java之注解Annotation
Java 注解(Annotation)是 JDK 5.0 引入的一种元数据机制,用于描述某些代码的附加信息,这些信息可以在运行时或编译时被读取。注解本身不会改变程序的执行流程,但可以被编译器或运行时环境用来进行额外的处理。
2024-08-05 17:26:28
846
原创 JAVA之枚举Enum
一、什么是枚举?二、枚举的一些关键特性三、枚举使用场景四、枚举与常量类五、枚举与普通类六、枚举与数据库七、单个参数示例:(类似普通类中得构造参数)八、多个参数:(类似普通类中得构造参数)九、异常处理应用十、高级操作十一、枚举上使用注解
2024-08-01 17:28:31
7321
原创 Windows 系统下 Docker安装Kafka
1.拉取zookeeper并检查拉取是否成功 2.安装zookeeper并检查是否创建容器成功3.拉取kafka镜像4.创建kafka容器(我使用得是windows,换行符为“^”,Linux 系统将“^”改成“\”)5.验证Kafka是否正常运行6.创建测试主题
2024-07-30 16:57:39
527
原创 基于Docker安装RocketMQ
1.*拉取RocketMQ镜像2.*创建namesrv服务3.*构建namesrv容器4.*创建broker节点5.*创建RocketMQ控制台服务6.*启动Namesrv和Broker7.*查看控制台信息8.*broker.conf配置详解
2024-07-29 15:55:00
682
原创 com.alibaba.druid.pool.DruidDataSource error : testOnBorrow is true, validationQuery not set
com.alibaba.druid.pool.DruidDataSource error : testOnBorrow is true, validationQuery not set针对以上遇见的问题自我做个记录,以防出现类似问题遗忘1、在DB的参数配置文件上加 validationQuery:SELECT 1 testWhileIdle:true ...
2019-01-28 12:17:15
3777
docx4j-2.7.1+依赖包
2018-02-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人