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; } }