在排序数组中找到3个元素,这些元素的总和为0(a + b + c = 0)

时间:2018-11-14 18:39:18

标签: algorithm

有没有比明显的O(n ^ 3)更好的解决方案?我可以多次使用一个元素,因此对于数组{-1,0,2},有一个解决方案:(-1,-1,2)或(0,0,0)。

1 个答案:

答案 0 :(得分:1)

经典的3SUM问题可以在O(n ^ 2)中解决。也可以用O(n ^ 2)

解决
# assume arr is sorted and doesn't contain duplicates

out = []
s = set(arr)
for i in range(len(arr)):
    for j in range(i, len(arr)):
        a = - (arr[i] + arr[j])
        if a >= arr[j] and a in s:
            out.append((arr[i], arr[j], a))