要求:
给定一个数组,找出数组中是否有两个数对(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。
分析:
算法思路为:以数组为单位进行遍历,在遍历过程中,把数对和数对的值存储在字典中(键为数对的和,值为数对),当遍历到一个键值对时,如果它的和在字典中已经存在,那么就找到了满足条件的键值对。
实现:
# -*- coding:utf-8 -*-
#用来存储数对
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中没有,则放入map中
sums = arr[i] + arr[j]
if sums not in sumPair: