我在准备面试时试图解决这个问题。问题如下:
查找数组的对称差异
输入:两个整数数组
输出:一个整数数组 它只出现在一个(不是两个)数组中
测试案例
输入:
[ 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
中建议一些特定于语言的库方法答案 0 :(得分:7)
最快捷的方法是将第一个Array
的所有值放入HashTable
,然后执行contains()
以查看第二个Array
的值是否存在。这将为您提供O(n)