Vi recentemente esse código Javascript no StackOverflow para mesclar duas matrizes e remover duplicatas:
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();
Enquanto esse código funciona, é terrivelmente ineficiente ( O(n^2)
). Seu desafio é criar um algoritmo com menos complexidade.
O critério vencedor é a solução com a menor complexidade , mas os vínculos serão quebrados pelo menor comprimento de caracteres.
Requisitos :
Empacote todo o seu código em uma função que atenda aos seguintes requisitos de "correção:"
- Entrada: duas matrizes
- Saída: Uma matriz
- Mescla elementos de ambas as matrizes - Qualquer elemento em qualquer matriz de entrada deve estar na matriz de saída.
- A matriz gerada não deve ter duplicatas.
- O pedido não importa (diferente do original)
- Qualquer idioma conta
- Não use as funções de matriz da biblioteca padrão para detectar exclusividade ou mesclar conjuntos / matrizes (embora outras coisas da biblioteca padrão estejam corretas). Deixe-me fazer a distinção de que a concatenação de matriz é boa, mas as funções que já fazem todas as opções acima não são.
[1, 2, 2, 3]
e [2, 3, 4]
retornar [1, 2, 2, 3, 4]
ou [1, 2, 3, 4]
?