The Smallest Difference
Question
Given two array of integers(the first array is array A, the second array is array B), now we are going to find a element in array A which is A[i], and another element in array B which is B[j], so that the difference between A[i] and B[j] (|A[i] - B[j]|) is as small as possible, return their smallest difference.
Example
For example, given array A = [3,6,7,4], B = [2,8,9,3], return 0
Challenge
O(n log n) time
Tags
Two Pointers LintCode Copyright Sort Array
Analysis
Brutal Force 双重for循环,找Math.abs(A[i] - B[j])的最小值
先排序 O(nlogn) 之后也有两种思路:
再通过二分查找O(logn),在B[j]中找接近A[i]的元素,找n次,总共时间复杂度O(n * logn)
two pointers,只要A[i] < B[j],那么i++;反之,j++,循环结束条件就是i, j有一者达到数组边界
例如题目中的示例:
排序后:
排过序后,当A[i] < B[j]时,A[]中更接近B[j]的则可能出现在A[i]其后,因此i++;反过来,则需要j++
另:想起了牛顿法中寻找f(x) = 0,零点存在于f(x1) < 0, f(x2) > 0这个区间。在本题中,则是A[i1] < B[j], 那么如果有A[i2] > B[j],则中间有可能就有这样的“零点”,也就是A[i]与B[j]差值的绝对值为零的情况。
Solution
Last updated