Java数据结构与算法分析
算法是思维的美妙
谷哥的小弟
历任研发工程师,技术组长,项目经理;曾于2016年、2020年两度荣获优快云年度十大博客之星。
十载寒冰,难凉热血;多年过去,历经变迁,物是人非。
然而,对于技术的探索和追求从未停歇。
坚持原创,热衷分享,初心未改,继往开来!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
重温经典算法——二分查找
二分查找(Binary Search)是一种基于分治策略的高效搜索算法,适用于有序数组,其核心思想是通过重复将搜索区间分成两半:首先取中间元素与目标值比较,若相等则直接返回位置;若目标值小于中间元素,则在左半区间继续搜索;若目标值大于中间元素,则在右半区间继续搜索,直至找到目标值或搜索区间为空(表明目标不存在)。该算法每次比较可将搜索范围缩小一半,时间复杂度为 O(log n),空间复杂度为 O(1),具有查找速度快、性能稳定的优点。原创 2025-06-10 23:39:15 · 451 阅读 · 0 评论 -
重温经典算法——希尔排序
本文介绍了希尔排序的原理与Java实现。希尔排序作为插入排序的改进版,通过分组增量逐步缩小实现高效排序,平均时间复杂度O(n log n)到O(n^(3/2)),空间复杂度O(1)。原创 2025-06-04 22:29:12 · 233 阅读 · 0 评论 -
重温经典算法——堆排序
堆排序是一种基于二叉堆的高效排序算法,时间复杂度为O(n log n)。其核心步骤包括构建最大堆和反复取出堆顶元素排序:首先从最后一个非叶子节点开始调整构建最大堆,然后将堆顶元素与末尾元素交换,并重新调整剩余元素为新堆。原创 2025-06-02 19:30:00 · 329 阅读 · 0 评论 -
重温经典算法——快速排序
本文介绍了快速排序算法的原理与Java实现。快速排序采用分治策略,通过选取基准元素将数组分为两个子数组并递归排序,平均时间复杂度为O(n log n),最差情况下为O(n²)。代码示例演示了分区过程和递归排序的实现,包含基准选择、元素交换等关键步骤。测试用例验证了对数组{10,7,8,9,1,5}的正确排序结果。文章版权归原作者谷哥的小弟所有,博客地址见原文。原创 2025-06-02 14:45:00 · 258 阅读 · 0 评论 -
重温经典算法——并归排序
归并排序基于分治思想,递归地将数组拆分为两个子数组,分别排序后合并。时间复杂度为 O(n log n),空间复杂度 O(n)(需额外存储合并后的数组),是稳定排序,适用于大数据量且对稳定性有要求的场景(如外部排序)。原创 2025-06-02 10:30:00 · 211 阅读 · 0 评论 -
重温经典算法——插入排序
本文介绍了插入排序的基本原理及Java实现。插入排序通过将数组分为已排序和未排序两部分,依次将未排序元素插入已排序部分的正确位置。算法时间复杂度平均和最差为O(n²),最好O(n),空间复杂度O(1),属于稳定排序,适用于小规模或部分有序数据。文中提供了完整的Java代码示例,演示了对数组进行插入排序的过程。原创 2025-05-29 23:45:00 · 318 阅读 · 0 评论 -
重温经典算法——选择排序
选择排序属于简单的原地排序算法,通过将待排序序列分为已排序和未排序两部分,每次从未排序部分选择最小元素,与未排序部分的起始位置交换,逐步扩大已排序范围。其核心操作是“选择最小元素并固定位置”,时间复杂度始终为 O(n²)(无论数据是否有序),空间复杂度为 O(1),属于不稳定排序(如对 [5, 5, 3] 排序可能破坏相同元素的原始顺序),适用于小规模数据或内存敏感的场景。原创 2025-05-29 22:30:00 · 337 阅读 · 0 评论 -
重温经典算法——冒泡排序
冒泡排序是一种基于交换的简单排序算法,通过重复遍历待排序序列,依次比较相邻元素的值,若顺序错误则交换它们,直到整个序列有序。冒泡算法核心思想是将较大的元素逐渐“浮”到序列末尾。时间复杂度为平均和最差情况 O(n²),最好情况(已有序时)为 O(n),空间复杂度为 O(1),属于原地排序且稳定,但由于效率较低,通常仅用于教学或小规模数据场景。原创 2025-05-29 17:40:21 · 311 阅读 · 0 评论 -
哈希表的几种实现方式与比较
哈希表(Hash Table)是一种常用的数据结构,用于实现键值对的映射关系。它通过哈希函数将键映射到一个特定的索引位置,然后在该位置存储相应的值。这样可以实现快速的插入、删除和查找操作,使得哈希表在很多场景下具有高效的性能。原创 2023-12-09 21:54:41 · 882 阅读 · 1 评论 -
贪心算法实现月饼销售收益的最大化
月饼是中秋佳节传统美食,不同地区有许多不同风味的月饼。现给定每种月饼的库存量、总售价、以及市场的最大需求量,请计算商家可以获得的最大收益。假如有3种月饼,其库存量分别为18、15、10万吨,总售价分别为75、72、45亿元。假设市场的最大需求量只有20万吨,那么最大收益策略应该是卖出第2种月饼15万吨、第3种月饼5万吨,终于获得 94.5亿元收益。原创 2023-05-01 00:15:00 · 326 阅读 · 0 评论 -
找出数组中的次大值
该程序中,首先定义了一个整型数组arr,然后定义了两个变量largest和secondLargest,分别用于存储当前已知的最大值和次大值。开始时,这两个变量的初值都被赋为Integer.MIN_VALUE,即整型的最小值。原创 2022-09-15 22:36:22 · 1187 阅读 · 0 评论 -
创建元素随机且不重复的数组
请创建数组长度为7的int类型数组。数组中的数字为[1,10]中的任意值,但是各元素值各不相同。原创 2012-12-24 12:08:02 · 2060 阅读 · 0 评论 -
判断数字是否为完美数
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。例如:6、28都是完美数。原创 2012-11-18 00:28:29 · 1881 阅读 · 0 评论 -
找出数组中出现次数最多的元素
请找出int类型数组中出现次数最多的元素原创 2012-11-17 23:51:23 · 3364 阅读 · 0 评论 -
判断数字是否为普洛尼克数
普洛尼克数(pronic number),也叫欧波朗数(oblong number),是两个连续非负整数的积,即m=n*(n+1)。开头的几个普洛尼克数是:0, 2, 6, 12,20, 30, 42, 56, 72, 90, 110, 132, 156, 182, 210, 240, 272, 306, 342, 380, 420, 462, 506, 552, 600, 650, 702, 756, 812, 870, 930, 992, 1056, 1122, 1190, 1260.......原创 2012-11-18 01:01:32 · 1663 阅读 · 0 评论 -
找出数组中重复出现的元素
请找出int类型数组中重复出现(不论次数)的元素。原创 2012-11-18 00:29:22 · 1205 阅读 · 1 评论 -
判断字符串是否是回文
请判断字符串是否是回文原创 2012-12-24 14:38:17 · 1794 阅读 · 0 评论 -
交换两个int类型的整数
请用Java语言交换两个int类型的整数原创 2012-11-18 00:30:03 · 1263 阅读 · 0 评论 -
利用while循环逆置整数
利用Java语言的while循环逆置整数。例如,原本整数为9527,逆置后为7259。原创 2013-09-29 18:11:53 · 2684 阅读 · 0 评论 -
判断一个数是否是质数(素数)
利用Java代码判断一个数是否是素数原创 2014-02-02 01:51:30 · 3586 阅读 · 0 评论 -
Java数据结构与算法分析——阶乘
阶乘是基斯顿·卡曼(Christian Kramp,1760~1826)于 1808 年发明的运算符号。一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。原创 2012-11-18 00:24:07 · 1376 阅读 · 0 评论 -
Java数据结构与算法分析——斐波拉契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从 1963 年起出版了以《原创 2020-02-11 20:54:39 · 2642 阅读 · 0 评论 -
Java数据结构与算法分析——求两个字符的最大子串
找出两个字符串中的最大子串,即最大的交集。例如:udappyzk和xzhappymol最大子串为appy原创 2020-10-28 19:18:04 · 1294 阅读 · 3 评论 -
Java数据结构与算法分析——二分法查找
现存一个有序数组{ 2, 5, 8, 12, 16, 23, 38, 56, 72, 91 },请利用二分法查找出元素23所对应的下标index。二分查找的前提是数组中的元素是有序的,否则无法查找。原创 2020-10-27 22:29:08 · 1052 阅读 · 8 评论 -
Java数据结构与算法分析——简单选择排序
现存在一个无序数组{9,1,2,5,7,4,8,6,3,5},请利用简单选择排序将数组按照从小到大(从大到小)排序。取出第一个元素依次与其后的每个元素比较,若大于则交换位置,在第一次排序完成后第一个元素存放的就是数组中的最小值原创 2020-10-27 21:16:45 · 516 阅读 · 0 评论 -
Java数据结构与算法分析——冒泡排序
现存在一个无序数组{1,9,7,5,3},请利用冒泡排序将数组按照从小到大(从大到小)排序。第一趟:一共五个数,比较了4回,流程如下:原创 2020-10-27 20:48:58 · 567 阅读 · 2 评论
分享