Recentemente ho visto questo codice Javascript su StackOverflow per unire due matrici e rimuovere duplicati:
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();
Mentre questo codice funziona, è orribilmente inefficiente ( O(n^2)
). La tua sfida è creare un algoritmo con meno complessità.
I criteri vincenti sono la soluzione con la minima complessità , ma i legami saranno spezzati dalla lunghezza più breve dei personaggi.
Requisiti :
Comprimi tutto il codice in una funzione che soddisfi i seguenti requisiti di "correttezza:"
- Input: due array
- Uscita: un array
- Unisce elementi di entrambi gli array: qualsiasi elemento in uno degli array di input deve essere nell'array di output.
- L'array di output non dovrebbe avere duplicati.
- L'ordine non ha importanza (a differenza dell'originale)
- Ogni lingua conta
- Non utilizzare le funzioni di array della libreria standard per rilevare l'univocità o unire set / array (anche se altre cose della libreria standard sono a posto). Consentitemi di fare la distinzione che la concatenazione di array va bene, ma le funzioni che già fanno tutto quanto sopra non lo sono.
[1, 2, 2, 3]
e la [2, 3, 4]
restituzione dovrebbero [1, 2, 2, 3, 4]
o [1, 2, 3, 4]
?