LintCode 387: Smallest Difference

LintCode 387: Smallest Difference

题目描述

给定两个整数数组(第一个是数组A,第二个是数组B),在数组A中取A[i],数组B中取B[j]A[i]B[j]两者的差越小越好(|A[i] - B[j]|)。返回最小差。

样例

给定数组A = [3,4,6,7]B = [2,3,8,9],返回 0

Mon Feb 27 2017

思路

先将两个数组排序,然后分别用一个指针i, j,从前往后遍历,若A[i] > B[j],要想差更小,那么需要j++,其它情况同理。

时间复杂度是 \(O(nlogn)\),主要是需要排序。

本题还有其它的方法,遍历A数组,然后用二分查找B数组,也值得一试。

代码

// 最小差
int smallestDifference(vector<int> &A, vector<int> &B) 
{
    sort(A.begin(), A.end());
    sort(B.begin(), B.end());
    int i = 0, j = 0, min = INT_MAX;
    while(i < A.size() && j < B.size())
    {
        int diff;
        if (A[i] > B[j])
        {
            diff = A[i] - B[j];
            ++j;
        }
        else if (A[i] < B[j])
        {
            diff = B[j] - A[i];
            ++i;
        }
        else return 0;
        if (diff < min) min = diff;
    }
    return min;
}
posted @ 2017-02-27 15:53  GenkunAbe  阅读(132)  评论(0编辑  收藏  举报