求数组排序后相邻两个数的最大差值

import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNext()) {
            int n = in.nextInt();
            int[] nums = new int[n];
            for (int i = 0; i < n; i++) {
                nums[i] = in.nextInt();
            }

            int max = Integer.MIN_VALUE;
            int min = Integer.MAX_VALUE;
            for (int num : nums) {
                max = Math.max(max, num);
                min = Math.min(min, num);
            }

            int avg = (max - min) / (n - 1);
            int[] count = new int[n + 1];
            int[] maxs = new int[n + 1];
            int[] mins = new int[n + 1];
            Arrays.fill(maxs, Integer.MIN_VALUE);
            Arrays.fill(mins, Integer.MAX_VALUE);

            for (int i = 0; i < n; i++) {
                int index = (nums[i] - min) / avg;
                count[index]++;
                maxs[index] = Math.max(maxs[index], nums[i]);
                mins[index] = Math.min(mins[index], nums[i]);
            }

            int maxDif = Integer.MIN_VALUE;
            int pre = maxs[0];
            for (int i = 1; i < n + 1; i++) {
                if (count[i] > 0) {
                    maxDif = Math.max(maxDif, mins[i] - pre);
                    pre = maxs[i];
                }
            }
            System.out.println(maxDif);
        }

    }
}

猜你喜欢

转载自blog.csdn.net/ok0011/article/details/52829951