我已经苦苦思考这个问题有一段时间了。问题是这样的:-
我们有n^2个数字。我们需要找出是否存在一个三元组a,b,c,使得a+b+c = 0。对于更一般的情况,a+b+c = k。(给定k)
有一个O(n^2log(n))复杂度的解决方案。
任何帮助将不胜感激。
谢谢
我已经苦苦思考这个问题有一段时间了。问题是这样的:-
我们有n^2个数字。我们需要找出是否存在一个三元组a,b,c,使得a+b+c = 0。对于更一般的情况,a+b+c = k。(给定k)
有一个O(n^2log(n))复杂度的解决方案。
任何帮助将不胜感激。
谢谢
我写了一个初步的解决方案。
它绝对可以在O(n^2)内完成。 你不需要对其进行排序。
这是一个需要将两个数字求和为x的问题的扩展,诀窍是使用哈希表。
def triplets(l, total):
"""Sum of 3 numbers to get to total
Basically an extension of the 2 table
"""
l = set( l)
d = { }
for i in l:
remain = total - i
inside = {}
for j in l:
if i == j:
continue
inside[j] = remain -j
d[i] = inside
good = set()
for first, dic in d.iteritems():
for second, third in dic.iteritems():
if third in l:
good.add( tuple(sorted([first, second, third])) )
for each in good:
print each
triplets( [2, 3, 4, 5, 6], 3+4+5)
注意:我们可以使用一种快速排序方法来处理三元组,其时间复杂度为O(1)。