Algorithm 关于在数组中查找值的问题

Algorithm 关于在数组中查找值的问题,algorithm,Algorithm,我几天前见过这样的问题 there is given two array find elements which are common of these array 解决方案之一是对大数组进行排序,然后使用二进制搜索算法 还有另一种算法——暴力算法 for (int i=0;i<array1.length;i++){ for (int j=0;j<array2.length;j++){ if (array1[i]==array2[j]){ //code her

我几天前见过这样的问题

there is given two array find      elements which are common   of these array
解决方案之一是对大数组进行排序,然后使用二进制搜索算法
还有另一种算法——暴力算法

 for (int i=0;i<array1.length;i++){
  for (int j=0;j<array2.length;j++){
 if (array1[i]==array2[j]){
//code here
}
}
for(int i=0;iAn
O(M log N)
solution 让
arr1
的长度为
O(M)
,而
arr2
的长度为
O(N)
。排序/二进制搜索算法为
O(M log N)

伪代码如下所示:

SORT(arr2)   # N log N

FOR EACH element x OF arr1             # M
   IF binarySearch(x, arr2) is FOUND   # log N
       DECLARE DUP x
INIT arr1set AS emptySet

FOR EACH element x OF arr1    # M
   INSERT x INTO arr1set      # 1

FOR EACH element x OF arr2    # N
   IF arr1set CONTAINS x      # 1
      DECLARE DUP x
O(M log N)
O(MN)
好得多


线性时间解 还有第三种方法是
O(M+N)
,使用具有
O(1)
插入和测试的集合。基于哈希的集合满足这一期望

伪代码如下所示:

SORT(arr2)   # N log N

FOR EACH element x OF arr1             # M
   IF binarySearch(x, arr2) is FOUND   # log N
       DECLARE DUP x
INIT arr1set AS emptySet

FOR EACH element x OF arr1    # M
   INSERT x INTO arr1set      # 1

FOR EACH element x OF arr2    # N
   IF arr1set CONTAINS x      # 1
      DECLARE DUP x

第一种方法更好。如果排序
array1
,第一种方法的复杂性是
O(array1.length*log(array1.length)+array2.length*log(array1.length))
,因为首先排序第一个数组(在
O(array1.length*log(array1.length))
),然后对第二个数组中的每个元素在第一个数组中进行二进制搜索(在
O(array2.length*log(array1.length)
)。

第一个解决方案的复杂性为:

sort_complexity(longer_array) + smaller_array.length*log_2(longer_array.length)

如果您可以选择使用其他数据结构,那么使用哈希将有助于您:将第一个数组的所有元素推入哈希。迭代第二个数组并检查每个元素是否存在。如果哈希-->中存在元素,则两个数组都是通用的。

这不完全正确。首先,您不必排序两个数组和第二个数组的长度不必相等。@IVlad:好的,进行了调整。