Si desea que el más rápido * Respuesta:
- Ordenar un array - El tiempo es N log N.
- Para cada elemento en la segunda matriz, busque la primera. Si lo encuentras, agrega 1 a una matriz complementaria; de lo contrario, agregue 0 - time es N log N, usando N espacio.
- Para cada recuento distinto de cero, copie la entrada correspondiente en la matriz temporal, compactando para que aún esté ordenada; el tiempo es N.
- Para cada elemento en la tercera matriz, busque la matriz temporal; cuando encuentres un golpe, detente. El tiempo es inferior a N N. registro
Aquí está el código en Scala que ilustra esto:
import java.util.Arrays
val a = Array(1,5,2,3,14,1,7)
val b = Array(3,9,14,4,2,2,4)
val c = Array(1,9,11,6,8,3,1)
Arrays.sort(a)
val count = new Array[Int](a.length)
for (i <- 0 until b.length) {
val j =Arrays.binarySearch(a,b(i))
if (j >= 0) count(j) += 1
}
var n = 0
for (i <- 0 until count.length) if (count(i)>0) { count(n) = a(i); n+= 1 }
for (i <- 0 until c.length) {
if (Arrays.binarySearch(count,0,n,c(i))>=0) println(c(i))
}
Con un poco más de complejidad, puede utilizar ningún espacio adicional en el costo de ser aún más destructivo de sus matrices originales, o puede evitar tocar sus matrices originales a costa de otro N espacio.
Editar: * como los comentarios han señalado, las tablas hash son más rápidas para las entradas no perversas. Este es el "peor caso más rápido". El peor de los casos puede no ser tan improbable a menos que uses un algoritmo de hash realmente bueno, que bien puede consumir más tiempo que tu tipo. Por ejemplo, si multiplicas todos tus valores por 2^16, el hashing trivial (es decir, simplemente usa el entero de máscara de bits como índice) colisionará cada vez en listas de menos de 64k ....
¿Puede aclarar si una de las matrices puede tener elementos que se repiten o no? Por ejemplo, puede tener 'A = {1, 1, 1, 1, 1}; B = {2, 3, 4, 5, 1}; C = {2, 2, 2, 2, 1}; '? – IVlad
Por favor, lea el qn con cuidado. –
Además, dices que solo hay un elemento común en las tres matrices. ¿Significa eso que solo aparece un elemento en las tres matrices y solo dos de las tres matrices pueden tener otros elementos comunes, o pueden dos de tres matrices no tener otros elementos comunes que el que es común en los tres? – IVlad