/**
* 无序数组排序后的最大相邻差
*/
public class MaxDis {
public static int getMaxSortedDistance(int[] array){
//得到数组的最大值和最小值
int max=array[0];
int min=array[0];
for(int i=1;i<array.length;i++){
if(array[i]>max)
max=array[i];
if(array[i]<min)
min=array[i];
}
int d=max-min;
//1.如果 max和min相等则说明数组中所有元素都相等则,返回0
if(d==0){
return 0;
}
//2.初始化桶
int bucketNum=array.length;
Bucket[] buckets=new Bucket[bucketNum];
for(int i=0;i<bucketNum;i++){
buckets[i]=new Bucket();
}
//3遍历原数组,确定每个桶中的最大值和最小值
for(int i=0;i<array.length;i++){
//确定数组元素所归属的下标
int index=((array[i]-min)*(bucketNum-1)/d);
if(buckets[index].min==null||buckets[index].min>array[i]){
buckets[index].min=array[i];
}
if(buckets[index].max==null||buckets[index].max<array[i]){
buckets[index].max=array[i];
}
}
//4.遍历桶,找到最大差值
int leftMax=buckets[0].max;
int maxDistance=0;
for(int i=1;i<buckets.length;i++){
if(buckets[i].min==null){
continue;
}
if(buckets[i].min-leftMax>maxDistance){
maxDistance=buckets[i].min-leftMax;
}
leftMax=buckets[i].max;
}
return maxDistance;
}
private static class Bucket{
Integer max;
Integer min;
}
public static void main(String[] args) {
int[] array=new int[]{
2,6,43,6,3,56,21};
System.out.println(getMaxSortedDistance(array));
}
}
无序数组排序后的最大相邻差
猜你喜欢
转载自blog.csdn.net/weixin_42684418/article/details/103846216
今日推荐
周排行