Lintcode387 The Smallest Difference solution 題解

weixin_34321977發表於2017-12-22

【題目描述】

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.

給定兩個整數陣列(第一個是陣列A,第二個是陣列B),在陣列 A 中取 A[i],陣列 B 中取 B[j],A[i] 和 B[j]兩者的差越小越好(|A[i] - B[j]|)。返回最小差。

【題目連結】

www.lintcode.com/en/problem/the-smallest-difference/

【題目解析】

題目的要求是O(nlogn)的時間複雜度,那麼就會想到two pointers的做法:

1. 首先,two pointers做法一般都用在有序陣列上,所以上來先把A和B排序;

2. 然後,將A中的element A[i]一個一個拿出來,跟B裡的比較。這裡不需要將B中的每一個element都拿來比較,其實最需要比的只是與A[i]相近的那些。由此我們可以利用有序陣列的特點,做一個二分搜尋,挑最重要的那些來比。比如,如果A[i]比B[mid]大,那麼diff有可能更小的就只能在B[mid]之後的那些數。

【參考答案】

www.jiuzhang.com/solutions/the-smallest-difference/

相關文章