一尘不染

检查2个数组是否相似而不进行散列或排序

algorithm

我们需要检查2个数组是否相似。元素也可以重复。例如,A = {2,3,4,5,6,6}和B = {3,6,2,4,6,5}是相似的。

我有一个幼稚的解决方案:

foreach i:int in arr1
 foreach j:int in arr2
  {
    if(i == j)
     j = -1;
  }

现在,如果j的所有元素都是-1,那么我们可以说2个数组是相似的。有人可以给出一个无法解决此问题的测试用例吗(我希望它应该可以使用!)?

也是O(n ^ 2)。我们可以做得更好吗?不允许排序和散列。


阅读 232

收藏
2020-07-28

共1个答案

一尘不染

您可以使用从其中之一构建的二进制搜索树。现在遍历另一个,检查该值是否已经在二进制搜索树中。这个在O(nlgn)中运行并使用O(n)空间。

2020-07-28