有趣的数字

小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?

输入描述:

输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2...an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.



输出描述:

对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。

 

输入例子:
6
45 12 45 32 5 6

 

输出例子:
1 2
思路:针对这个题要分数字有没有重复的情况,如在计算最小数组对时,6 6 6有三种数组对,而不是两种。(n*(n+1)/2)
在计算最大数组对时,2 2 3 4 4,有四种。n(min)*n(max)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            int n = scan.nextInt();
            int[] array = new int[n];
            for(int i=0;i<n;i++){
                array[i] = scan.nextInt();
            }
            Arrays.sort(array);
             int min = array[1]-array[0];
                int max = array[n-1] -array[0];
                int m=0;
                int c = 1;
                for(int i=1;i<n-1;i++){
                    int r = array[i+1]-array[i];
                    if(r<min){
                        min = r;
                        c=1;
                    }else if(r==min){
                        c++;
                    }
                }
                int count = 0;
                if(min == 0){
                    for(int i=0;i<n-1;i++){
                        if(array[i+1]-array[i]==0){
                            count ++;
                        }else{
                            m += count*(count+1)/2;
                            count = 0;
                        }
                    }
                    if(array[n-2] ==array[n-1]){
                        m += count*(count+1)/2;
                    }
                    
                }else{
                    m=c;
                }
                int minNum = 0;
                int maxNum = 0;
                for(int i=0;i<n;i++){
                    if(array[i]==array[0]){
                        minNum++;
                    }else if(array[i]==array[n-1]){
                        maxNum++;
                    }
                    
                }
                int q = minNum*maxNum;
                System.out.println(m+" "+q);
        }
    }
}

 

posted @ 2016-08-29 19:45  樱圃  阅读(217)  评论(0编辑  收藏  举报