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.
Example
For example, given array A = [3,6,7,4]
, B = [2,8,9,3]
, return 0
Challenge
O(n log n) time
public class Solution { /** * @param A, B: Two integer arrays. * @return: Their smallest difference. */ public int smallestDifference(int[] A, int[] B) { // write your code here if(A == null || A.length == 0 || B == null || B.length == 0) return 0; int res = Integer.MAX_VALUE; Arrays.sort(B); for(int i = 0; i < A.length; i++){ int left = 0; int right = B.length - 1; while(left < right - 1){ int mid = left + (right - left) / 2; if(B[mid] == A[i]) return 0; if(B[mid] > A[i]) right = mid; else left = mid; } res = Math.min(res, Math.min(Math.abs(B[left] - A[i]), Math.abs(B[right] - A[i]))); } return res; } }
时间: 2024-10-07 06:49:32