最近点对
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
0
-
描述
-
给出n个自然数,求出2个数绝对值之差最小的2个数,如果有多个满足要求,请输出其和最小的那对
-
输入
-
有多组测试数据
第一行一个整数n (2 <= n <= 1000).
第二行是n个自然数的值
输出
-
输出最近的那2个数即可(递增输出)。
样例输入
-
4 1 3 7 9 4 0 3 0 2
样例输出
-
1 3 0 0
-
有多组测试数据
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int number = scanner.nextInt();
int arr[] = new int[number];
for (int i = 0; i < number; i++) {
arr[i] = scanner.nextInt();
}
Arrays.sort(arr);
int start = 0;
int min = arr[1] - arr[0];
int sum = arr[1] + arr[0];
for (int i = 0; i < number - 1; i++) {
if (arr[i + 1] - arr[i] < min) {
min = arr[i + 1] - arr[i];
sum = arr[i + 1] + arr[i];
start = i;
}
if (arr[i + 1] - arr[i] == min && arr[i + 1] + arr[i] < sum) {
min = arr[i + 1] - arr[i];
sum = arr[i + 1] + arr[i];
start = i;
}
}
System.out.println(arr[start] + " " + arr[start + 1]);
System.out.println();
}
}
}