【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)

 

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