【python 面试题】如何从数组中找出满足a+b=c+d的两个数对

"""
给定一个数组,找出数组中是否有两个数对(a,b)和(c,d),使得a+b=c+d,其中,a、b、c、d是不同的元素。
如果是多个答案,打印任意一个即可。
例如给定数组[3,4,7,10,20,9,8],可以找到连个数组(3,8)和(4,7),使得3+8=4+7
"""

# 用来存储数对
class pair:
    def __init__(self, first, second):
        self.first = None
        self.second = None
        self.first = first
        self.second = second
    
def findPairs(arr):
    # 键为数对的和,值为数对
    sumPair = dict()
    n = len(arr)
    # 遍历数组中所有可能的数对
    i = 0
    while i<n:
        j = i + 1
        while j<n:
            # 如果这个数对的和在map中没有,则放入mapz中
            sums = arr[i] + arr[j]
            if sums not in sumPair:
                sumPair[sums] = pair(i, j)
            # 如果map中已经存在与sum相同的数对了,找出并打印出来
            else:
                p = sumPair[sums]
                print('(' + str(arr[p.first]) + ',' + str(arr[p.second]) + '),('
                      + str(arr[i]) + ',' + str(arr[j]) + ')')
                return True
            j+=1
        i+=1
    return False

if __name__=='__main__':
    
    arr = [3,4,7,10,20,9,8]
    findPairs(arr)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章