# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.10 如何从数组中找出满足 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
分析:
之前做过给定数组是有序的情况下,求相同数对的。当时采用从中间向两边扩散的方式来做的。
这道题目给定的数组无序,一种方式就是先排。
关键:
1 书上解法
建立<数对和,数对>的字典即可
便利所有数对就是O(n^2)
参考:
Python程序员面试算法宝典
'''
class Pair(object):
def __init__(self, first, second):
self.first = first
self.second = second
def findEqualPairs(data):
if not data:
return
length = len(data)
i = 0
sumToPair = dict()
while i < length:
j = i + 1
while j < length:
first = data[i]
second = data[j]
sum = first + second
if sum in sumToPair:
pair = sumToPair[sum]
info = "find equal pairs, ({first}, {second}), ({fir}, {sec})".format(
first=first,
second=second,
fir=pair.first,
sec=pair.second
)
print info
else:
pair = Pair(first, second)
sumToPair[sum] = pair
j += 1
i += 1
def process():
data = [3, 4, 7, 10, 20, 9, 8]
findEqualPairs(data)
if __name__ == "__main__":
process()
Python程序员面试算法宝典---解题总结: 第二章 栈、队列与哈希 2.10 如何从数组中找出满足 a+b=c+d 的两个数对
猜你喜欢
转载自blog.csdn.net/qingyuanluofeng/article/details/91351998
今日推荐
周排行