Recientemente vi este código Javascript en StackOverflow para fusionar dos matrices y eliminar duplicados:
Array.prototype.unique = function() {
var a = this.concat();
for(var i=0; i<a.length; ++i) {
for(var j=i+1; j<a.length; ++j) {
if(a[i] === a[j])
a.splice(j--, 1);
}
}
return a;
};
var array1 = ["Vijendra","Singh"];
var array2 = ["Singh", "Shakya"];
var array3 = array1.concat(array2).unique();
Si bien este código funciona, es terriblemente ineficiente ( O(n^2)
). Su desafío es hacer un algoritmo con menos complejidad.
El criterio ganador es la solución con la menor complejidad , pero los lazos se romperán por la longitud más corta en caracteres.
Requisitos :
Empaquete todo su código en una función que cumpla con los siguientes requisitos de "corrección":
- Entrada: dos matrices
- Salida: una matriz
- Fusiona elementos de ambas matrices juntas: cualquier elemento en cualquier matriz de entrada debe estar en la matriz de salida.
- La matriz de salida no debe tener duplicados.
- El orden no importa (a diferencia del original)
- Cualquier idioma cuenta
- No utilice las funciones de matriz de la biblioteca estándar para detectar unicidad o fusionar conjuntos / matrices (aunque otras cosas de la biblioteca estándar están bien). Permítanme hacer la distinción de que la concatenación de matriz está bien, pero las funciones que ya hacen todo lo anterior no lo están.
[1, 2, 2, 3]
y [2, 3, 4]
volver [1, 2, 2, 3, 4]
o [1, 2, 3, 4]
?