题目:
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?
输入描述:
输入包含多组测试数据。
对于每组测试数据:
N - 本组测试数据有n个数
a1,a2…an - 需要计算的数据
保证:
1<=N<=100000,0<=ai<=INT_MAX.
输出描述:
对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。
输入例子:
6
45 12 45 32 5 6
输出例子:
1 2
import java.util.*;
public class 有趣的数字 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []a=new int[n];
for (int i=0;i<n;i++){
a[i]=sc.nextInt();
}
Arrays.sort(a);
int maxNum=0;
int e=1,f=1,m1=0,m2=n-1;
while (a[m2]==a[m2-1]){
e++;
--m2;
}
while (a[m1] == a[m1 + 1]) {
++f;
++m1;
}
maxNum=e*f;
int minNum=0;
int mintmp=a[n-1];
for(int i=1;i<n;++i){
if(mintmp>a[i]-a[i-1]){
mintmp=a[i]-a[i-1];
}
}
if (mintmp>0){
for (int i=1;i<n;++i){
if(mintmp==a[i]-a[i-1]){
minNum++;
}
}
}else {
for (int i=1;i<n;i++){
int j=i-1;
while(a[j]==a[i]&&j>=0){
minNum++;
--j;
}
}
}
System.out.println(minNum+" "+maxNum);
}
}