原题如下:
最小差
给定两个整数数组(第一个是数组 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
。
1、首先能想到的方法就是最笨的办法,暴力的双重循环,遍历a和b里面的每一个数据进行对比,显然这种方法复杂度太高,稍加思考,对方法改进;
2、对a和b数组里面的数字可以先进行排序,然后用一层循环,对a和b当前的数据进行比较,如果有相等的,最小差必然为0,如果没有,则取最小的。
具体的C++代码如下:
class Solution {
public:
/**
* @param A, B: Two integer arrays.
* @return: Their smallest difference.
*/
int smallestDifference(vector<int> &A, vector<int> &B) {
// write your code here
sort(A.begin(),A.end());
sort(B.begin(),B.end());
int l1=A.size();
int l2=B.size();
if(l1==0)
{
return A[0];
}
else if(l2==0)
{
return B[0];
}
else if(l1==0&&l2==0)
{
return 0;
}
else
{
int sub=INT_MAX;
int i=0,j=0;
while(i<l1&&j<l2)
{
if(A[i]<B[j])
{
if(abs(A[i]-B[j])<sub)
{
sub=abs(A[i]-B[j]);
}
i++;
}
else if(A[i]>B[j])
{
if(abs(A[i]-B[j])<sub)
{
sub=abs(A[i]-B[j]);
}
j++;
}
else
{
sub=0;
break;
}
}
return sub;
}
}
};