Given two array of integers(the first array is array A, the second array is array B), now we are going to find a element in array A which is A[i], and another element in array B which is B[j], so that the difference between A[i] and B[j] (|A[i] - B[j]|) is as small as possible, return their smallest difference.指針
For example, given array A = [3,6,7,4], B = [2,8,9,3], return 0code
先對A
,B
排序,而後分別賦指針p1
,p2
。以兩個指針都不越界爲條件遍歷。若p1 <= p2
,更新當前差值,p1++
;反之,則更新差值並令p2++
。排序
public class Solution { public int smallestDifference(int[] A, int[] B) { int p1 = 0, p2 = 0; Arrays.sort(A); Arrays.sort(B); int res = Integer.MAX_VALUE; while (p1 < A.length && p2 < B.length) { if (A[p1] <= B[p2]) { res = Math.min(res, B[p2] - A[p1]); p1++; } else { res = Math.min(res, A[p1] - B[p2]); p2++; } } return res; } }