1.给定一个数组,找出数组中是否有两个数对(a,b)和(c,d),使得a+b=c+d,其中a,b,c,d是不同的元素,如果有多个答案,打印任意一个即可。例如给定数组:[3,4,7,10,20,9,8],可以找到两个数对,(3,8)和(4,7)
2.解题思路:可以使用字典法,算法的主要思路是:以数对为单位进行便利,在遍历过程中,把数对和数对的值存储在字典中,(健为数对的和,值为数对),当便利到一个健值对时,如过它的和在健值对中已经存在,那么就找到了满足条件的健值对
3,代码如下:
#用来存储数对
class Pair():
def __init__(self,first,second):
self.first = None
self.second = None
self.first = first
self.second = second
def findPairs(arr):
#健为数对的和,值为数对
sumPair = {}
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:
sumPair[sums] = Pair(i,j)
#map中已经存在与sum相同的数对了,找出来并打印出来
else:
p = sumPair[sums]
print(f"({arr[p.first]},{arr[p.second]}),{arr[i],arr[j]}")
return True
j += 1
i += 1
return False
if __name__ == '__main__':
arr = [3,4,7,10,20,9,8]
findPairs(arr)
结果:
(3,8),(4, 7)