Нещодавно я побачив цей код Javascript на StackOverflow для об'єднання двох масивів та видалення дублікатів:
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();
Хоча цей код працює, він жахливо неефективний ( O(n^2)
). Ваше завдання - скласти алгоритм з меншою складністю.
Критерії виграшу - це рішення з найменшою складністю , але зв'язки будуть розірвані на найменшу довжину символів.
Вимоги :
Упакуйте весь код разом у функцію, яка відповідає таким вимогам щодо "коректності".
- Вхід: два масиви
- Вихід: Один масив
- Об’єднує елементи обох масивів разом. Будь-який елемент у будь-якому вхідному масиві повинен бути у виведеному масиві.
- Виведений масив не повинен мати дублікатів.
- Замовлення не має значення (на відміну від оригіналу)
- Будь-яка мова рахується
- Не використовуйте стандартні функції масиву бібліотеки для виявлення унікальності або об'єднання наборів / масивів (хоча інші речі зі стандартної бібліотеки нормально). Дозвольте мені визначити, що конкатенація масиву - це нормально, але функції, які вже виконують усе вищезазначене, не є.
[1, 2, 2, 3]
та [2, 3, 4]
повернення [1, 2, 2, 3, 4]
чи [1, 2, 3, 4]
?