对称差异b / w未排序数组

时间:2014-08-04 18:35:42

标签: java c++ c arrays algorithm

我在准备面试时试图解决这个问题。问题如下:

  

查找数组的对称差异

     

输入:两个整数数组

     

输出:一个整数数组           它只出现在一个(不是两个)数组中

     

测试案例

     

输入:

           [ 1, 7, 8, 2, 4, 5 ]

           [ 3, 5, 1, 7, 6, 9 ]
     

输出:

           [ 8, 2, 4, 3, 6, 9 ]

我提出的方法是

  • 开始运行两个循环,查找常用元素然后打印其余元素 - T=O(n2)

  • 对两个数组进行排序,并遵循类似的策略来合并MergeSort的过程 - T=O(nlogn)

我想不出O(n)中的任何方法。有没有更低时间复杂度的算法来解决这个问题?

您还可以在c ++ / java

中建议一些特定于语言的库方法

1 个答案:

答案 0 :(得分:7)

最快捷的方法是将第一个Array的所有值放入HashTable,然后执行contains()以查看第二个Array的值是否存在。这将为您提供O(n)

的预期时间复杂度