题目:
给定一个数组,求排序之后,相邻两数之间的最大差值,要求时间复杂度O(N),且要求不能用非基于比较的排序。
示例:
例如:3 1 6 2 7 排序之后 : 1 2 3 6 7 则相邻最大差值为3(6-3=3)
解法:
1.循环数组,找到最小值和最大值。
2.若有N个数,就创建N+1个桶来装数,分别为 0号桶,1号桶,2号桶......N号桶 。
3.定义三个大小为N+1的数组。
4.循环原数组, 确定每个数被装入哪个桶。如何确定?-->which = (num-min)*N/(max-min),每个桶内只能存放进入该桶的最大值和最小值。
5.循环求后一个桶的最小值减去前一个桶的最大值,即得到最大差值。若是空桶,则跳过。
注释:
1.一共N个数,N+1个桶,且全局最小值放在第一个桶,全局最大值放在最后一个桶,那么中间必有桶是空桶。
2.空桶的意义:排除最大差值的两个相邻的数在同一个桶中。
空桶左边的桶内差值最大是9,空桶两边最小差值为11(30-19=11ÿ
无序数组排序后,求相邻两数之间的最大差值,代码过程详解
最新推荐文章于 2022-12-18 15:28:32 发布
博客详细介绍了如何在O(N)时间复杂度内解决求排序后数组相邻两数最大差值的问题,避免使用非比较排序。解法包括确定最小值和最大值,创建桶并将数组元素分配到桶中,然后计算相邻桶的最大差值。文中还解释了空桶在寻找最大差值中的作用,并提供了Java和Python的代码实现。
摘要由CSDN通过智能技术生成