问题:我们有一系列数字对,如[(10,20),(30,10),(30,40),(20,10),(90,80),(40,30), (50,60)]。 输出:打印序列中的对称对。 ex(10,20)(20,10)(30,40)(40,30)。
我能够使用两个for循环来解决这个问题,并在序列中搜索对称对的每个项目。但复杂性是O(n ^ 2)。 任何其他方法或数据结构可以减少时间复杂度?
答案 0 :(得分:2)
使用哈希,您可以执行O(N)
答案 1 :(得分:2)
python实现
data = [(10, 20), (30, 10), (30, 40), (20, 10), (90, 80), (40, 30), (50, 60)]
output = {}
for (a, b) in data:
v_min = min(a, b)
v_max = max(a, b)
if not output.has_key((v_min, v_max)):
output[(v_min, v_max)] = 0
output[(v_min, v_max)] += 1
pairs = filter(lambda (v, count): count >= 2, output.items())
print map(lambda ((a, b), count) : ((a, b), (b, a)), pairs)