Ostatnio widziałem ten kod JavaScript na StackOverflow do łączenia dwóch tablic i usuwania duplikatów:
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();
Chociaż ten kod działa, jest okropnie nieefektywny ( O(n^2)
). Twoim wyzwaniem jest stworzenie algorytmu o mniejszej złożoności.
Kryteria wygranej to rozwiązanie o najmniejszej złożoności , ale więzi zostaną zerwane przez najkrótszą długość znaków.
Wymagania :
Spakuj cały kod razem w funkcję spełniającą następujące wymagania dotyczące „poprawności”:
- Wejście: dwie tablice
- Wyjście: jedna tablica
- Scala elementy obu tablic razem - Każdy element w obu tablicach wejściowych musi znajdować się w tablicy wyjściowej.
- Tablica wyjściowa nie powinna mieć duplikatów.
- Kolejność nie ma znaczenia (w przeciwieństwie do oryginału)
- Dowolny język się liczy
- Nie używaj funkcji tablicy standardowej biblioteki do wykrywania unikatowości lub łączenia zestawów / tablic (chociaż inne rzeczy ze standardowej biblioteki są w porządku). Pozwólcie mi rozróżnić, że konkatenacja tablic jest w porządku, ale funkcje, które już wykonują wszystkie powyższe czynności, nie są.
[1, 2, 2, 3]
i [2, 3, 4]
zwrócić, [1, 2, 2, 3, 4]
czy [1, 2, 3, 4]
?