考虑有三个数组列表,每个列表长度相等,并且其中有正数、负数和零。我必须编写一个程序来查找总和为零的组合。所以基本上,如果数组是: -
A = {0, -1, 2}
B = {0, -1, -2}
C = {0, -2, 0}
输出/输出:A[0] + B[0] + C[0]、A[2] + B[2] + C[2] 等。
我可以想到两种方法,1. 有 3 个 for 循环并使用 a[i] + b[j] + c[k] 计算总和,如果为零则打印索引。大 O 将是 O(N^3) 2. 有两个 for 循环,但使用二分搜索找到第三个元素,它将使总和为零。大 O 将是 O(N^2LogN)
还有其他方法吗?
谢谢。
编辑: 根据下面给出的答案,我的第一个解决方案是最快的。但是,如果问题是关于“查找”组合的数量而不是打印它们,那么请参阅下面的 Grigor Gevorgyan 回答。