无序数组排序后,求相邻两数之间的最大差值,代码过程详解

博客详细介绍了如何在O(N)时间复杂度内解决求排序后数组相邻两数最大差值的问题,避免使用非比较排序。解法包括确定最小值和最大值,创建桶并将数组元素分配到桶中,然后计算相邻桶的最大差值。文中还解释了空桶在寻找最大差值中的作用,并提供了Java和Python的代码实现。
摘要由CSDN通过智能技术生成

题目:

给定一个数组,求排序之后,相邻两数之间的最大差值,要求时间复杂度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ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值