Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对称差分b/w未排序阵列_Java_C++_C_Arrays_Algorithm - Fatal编程技术网

Java 对称差分b/w未排序阵列

Java 对称差分b/w未排序阵列,java,c++,c,arrays,algorithm,Java,C++,C,Arrays,Algorithm,在准备面试时,我试图解决这个问题。问题如下: 查找阵列的对称差异 输入:两个整数数组 输出:一个整数数组 仅在一个(而不是两个)阵列中发生 测试用例: 输入: [ 1, 7, 8, 2, 4, 5 ] [ 3, 5, 1, 7, 6, 9 ] 输出: [ 8, 2, 4, 3, 6, 9 ] 我想出的方法是 Brute用于运行两个循环,查找公共元素,然后打印其余的-T=O(n2) 对两个数组进行排序,并按照类似的策略合并M

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

查找阵列的对称差异

输入:两个整数数组

输出:一个整数数组 仅在一个(而不是两个)阵列中发生

测试用例:

输入:

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

           [ 3, 5, 1, 7, 6, 9 ]
输出:

           [ 8, 2, 4, 3, 6, 9 ]
我想出的方法是

  • Brute用于运行两个循环,查找公共元素,然后打印其余的-
    T=O(n2)

  • 对两个数组进行排序,并按照类似的策略合并MergeSort-
    T=O(nlogn)

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


您还可以在C++/Java/P>> P>中提出一些特定于语言的库方法。最快的方法是将第一个代码>数组< /COD>的所有值放入<代码>哈希表< /C>中,然后执行<代码> C++(java)< /C> >以查看第二个代码>数组< /COD>的值是否存在。这将使您的预期时间复杂度为

O(n)

整数的值有界吗?可以在有限的范围内计数。如果值有合理的下限和上限,则可以使用查找表。这是唯一一个真正的O(n)算法,可以立即浮现在脑海中。两个数组中的每个值是否都是唯一的(例如,第一个数组是否是
[1,1,7,8,2,4,5]
)?@Jashaszun问题是从博客中复制粘贴的。但我也有这个疑问,这会给编码带来很大的麻烦。O(n)的平均时间复杂度。最坏的情况是O(n^2)。如何从第一个数组中获取非重复值?@Nanos if
contains()
返回true您只需从
哈希表中删除该值,就可以得到与第一个
数组
@rsay3
O(1)
平均值/
O(n)
最坏的情况是一次搜索。您正在执行
n
搜索,因此最坏的情况是
n*O(n)=O(n^2)
@Nanos如果您正在查找对称差异,那么如果存在重复项,例如第一个数组中有两个1,第二个数组中没有,那么这两个都将位于
哈希表中,并且生成的
数组
。如果第一个数组中有两个1,第二个数组中有一个1,则
contains
将返回true并删除两个实例,结果
数组中没有1