lintcode-medium-The Smallest Difference

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

 

posted @ 2016-04-07 08:43  哥布林工程师  阅读(173)  评论(0编辑  收藏  举报