无序数组排序后的最大相邻差

/**
 * 无序数组排序后的最大相邻差
 */
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