码迷,mamicode.com
首页 > 其他好文 > 详细

最小差

时间:2016-04-29 16:49:14      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

题目描述:给定两个整数数组(第一个是数组 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。

还记得之前做过一道“合并排序数组”的问题(详见:点击打开链接)。当时是选用了两个指针,分别指向两个数组,然后按照大小关系,合并数组。这道题求最小差,也可以用这种思路。

我们先将两个数组排序,此处,A和B都是排好的。用两个指针 i 和 j 分别指向这两个数组,初始时,都指向第一个元素,在这个例子里面,一个指3,一个指2. 差值是1

接下来,可以这样思考,既然指向的元素一个大,一个小,那么保持大的元素不变,小的元素向前增加,那就有可能缩减这个差,计算出新的差之后,再和旧的差比较,比旧的差小,则替换旧的差,成为暂时的最小值,直到其中有一个遍历完(因为当有一个遍历完时,再遍历另一个数组,得到的差只能更大)

那就很简单了:

class Solution:
    # @param A, B: Two lists of integer
    # @return: An integer
    def smallestDifference(self, A, B):
        A.sort()
        B.sort()
        i, j = 0, 0
        nA, nB = len(A), len(B)
        min_num = abs(A[0] - B[0])
        while i != nA and j != nB:
            min_num = min(abs(A[i] - B[j]), min_num)
            if A[i] > B[j]:
                j += 1
            else:
                i += 1
        return min_num
        # write your code here


最小差

标签:

原文地址:http://blog.csdn.net/guoziqing506/article/details/51258462

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!