class Solution:
# @param A, B: Two lists of integer
# @return: An integer
def smallestDifference(self, A, B):
# write your code here
B = sorted(B)
len_b = len(B)
m = 0
n = len(A)
ans = 9999999999
for i in range(len(A)):
mid = self.binary_search(A[i], B)
if mid == 0 or mid == len_b - 1:
ans = min(ans, abs(B[mid] - A[i]))
else:
ans = min(ans, abs(B[mid] - A[i]), abs(B[mid + 1] - A[i]), abs(B[mid-1] - A[i]))
return ans
def binary_search(self, a, B):
low = 0
high = len(B) - 1
mid = (high + low) / 2
while low <= high:
mid = (high + low) / 2
if a == B[mid]:
return mid
elif a < B[mid]:
high = mid - 1
else:
low = mid + 1
return mid
LintCode:最小差
最新推荐文章于 2020-03-13 18:56:37 发布