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