O(m * m * n)伪代码(其中m和n是各个数组的长度):
for(int i = 0; i < m - 1; i++)
for(int j = i + 1; j < m; j++)
for(int k = 0; k < n; k++)
if(M[i] + M[j] == N[k] {
print i, j, k
}
我正在寻找更优化的解决方案。
感谢。
答案 0 :(得分:2)
将M
插入哈希数组(哈希集/哈希表)中,以便O(1)
包含检查。然后迭代N
中的所有项目,并在此循环内迭代您的哈希集,伪代码:
foreach(integer x in N)
foreach(integer setY in hashArray)
if ( hashArray.Contains( x - setY ) )
then your solution is: setY + (x-setY) = x;
您可以在线性时间内找到这些项目索引。总运行时间为O(|N|*|M|)
。请记住,您可能需要处理极端情况(例如x = 2 * setY)。