找到三个指数x,y,z,使得M [x] + M [y] = N [z]

时间:2014-11-05 15:07:46

标签: algorithm sorting

给定两个数组(未排序)M和N.我必须找到三个索引x,y(在M中)和z(在N中),使得M [x] + M [y] = N [z]。 我的初始算法采用O(m * m * n)解。请注意,我必须找到索引和排序将更改索引。

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
            }

我正在寻找更优化的解决方案。

感谢。

1 个答案:

答案 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)。