给定两个整数数组(第一个是数组 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。
首先想到
def smallestDifference(A, B):
dif_list = []
for i in A:
for j in B:
dif_list.append(abs(i-j))
return min(dif_list)
空间复杂度没通过。
网上找到方法
def smallestDifference(A, B):
A.sort()
B.sort()
i = 0
j = 0
ret = 2147483647
while i < len(A) and j < len(B):
ret = min(ret, abs(A[i]-B[j]))
if A[i] > B[j]:
j += 1
elif A[i] < B[j]:
i += 1
elif A[i] == B[j]:
ret = 0
break
return ret
先排序,然后用两个指针分别扫描两个数组,每次更新他们的差值的绝对值。并且依据他们两个数字的大小来决定谁来移动指针。
lintcode 原题
网上方法的 出处
20180129