题目
Description
已知元素从小到大排列的两个数组x[]和y[],请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离
Input
第一行为两个整数m, n(1≤m, n≤1000),分别代表数组f[], g[]的长度。
第二行有m个元素,为数组f[]。
第三行有n个元素,为数组g[]。
Output
数组的最短距离
Sample Input
5 5
1 2 3 4 5
6 7 8 9 10
Sample Output
1
代码块
//注意细节方面就好了,本来我用的两重循环,因为,我某个方面出现错误,显示超时,我就将两重循环改成了一重循环,进行判断,结果还是显示超时,后来我才找到原因(之前的连个输入循环,都写成了n,这就尴尬了)。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cn = new Scanner(System.in);
int n = cn.nextInt();
int m = cn.nextInt();
int[] f = new int[n];
int[] g = new int[m];
for (int i = 0; i < n; i++) {
f[i] = cn.nextInt();
}
for (int i = 0; i < m; i++) {
g[i] = cn.nextInt();
}
System.out.println(min(f,g,n,m));
cn.close();
}
private static int min(int[] f, int[] g,int n,int m) {
int answer = Math.abs(f[0]-g[0]);
int i = 0, j = 0;
while (i < n && j < m) {
if (f[i] >= g[j]) {
if (answer > f[i] - g[j])
answer = f[i] - g[j];
j++;
} else {
if (answer > g[j] - f[i])
answer = g[j] - f[i];
i++;
}
}
return answer;
}
}